左神算法书籍《程序员代码面试指南》——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功能的栈

左神算法书籍《程序员代码面试指南》——2_07将单向链表按某值划分成左边小中间相等右边大的形式

左神算法书籍《程序员代码面试指南》——1_10最大值减去最小值小于或等于num的子数组数量