码迷,mamicode.com
首页 > 编程语言 > 详细

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表【★★】

时间:2019-09-02 23:36:37      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:函数   转换   col   结果   节点   return   oid   代码   算法   

【题目】
二叉树可以用常规的三种遍历结果来描述其结构,但是不够直观,尤其是二叉树中有重复值的时候,仅通过三种遍历的结果来构造二叉树的真实结构更是难上加难,有时则根本不可能。给定一棵二叉树的头节点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将搜索二叉树转换成双向链表【★★】

标签:函数   转换   col   结果   节点   return   oid   代码   算法   

原文地址:https://www.cnblogs.com/zzw1024/p/11450461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!