左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表★★
Posted zzw1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表★★相关的知识,希望对你有一定的参考价值。
【题目】
二叉树可以用常规的三种遍历结果来描述其结构,但是不够直观,尤其是二叉树中有重复值的时候,仅通过三种遍历的结果来构造二叉树的真实结构更是难上加难,有时则根本不可能。给定一棵二叉树的头节点head,已知二叉树节点值的类型为32位整型,请实现一个打印二叉树的函数,可以直观地展示树的形状,也便于画出真实的结构。
1 class PrintTree 2 3 public: 4 void Print(Node* root) 5 6 cout << "The shape of tree is: " << endl; 7 cout << "=============================================================" << endl; 8 PrintShape(root, 0, "H", 17); 9 cout << "=============================================================" << endl; 10 11 void PrintShape(Node* root, int h, string c, int len) 12 13 if (root) 14 15 PrintShape(root->rchild, h + 1, "v", len); 16 string val; 17 stringstream ss; 18 ss << root->val; 19 ss >> val; 20 val = c + val + c; 21 int lenM = val.length(); 22 int lenL = (len - lenM) / 2; 23 int lenR = len - lenM - lenL; 24 val = getSpace(lenL) + val + getSpace(lenR); 25 cout << getSpace(h*len) + val << endl; 26 PrintShape(root->lchild, h + 1, "^", len); 27 28 29 30 string getSpace(int num) 31 32 string space = " "; 33 for (int i = 0; i < num; ++i) 34 space.append(" "); 35 return space; 36 37 ;
以上是关于左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表★★的主要内容,如果未能解决你的问题,请参考以下文章
左神算法书籍《程序员代码面试指南》——2_06判断一个链表是否为回文结构
左神算法书籍《程序员代码面试指南》——1_06用栈来求解汉诺塔问题
左神算法书籍《程序员代码面试指南》——3_02打印二叉树的边界节点★★
左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈