![c0e880f81d7b177fdf2971c6f0a6eab1.png](https://i-blog.csdnimg.cn/blog_migrate/40a2fcf47ea38b3c3a6e3b931e21d41a.jpeg)
返回目录:
Chilan Yu:《数据结构》目录链接zhuanlan.zhihu.com![2008b43927ede12ceb72d3b93267766a.png](https://i-blog.csdnimg.cn/blog_migrate/a059ced59fb8c6826b2549bc47e88e60.jpeg)
6.3.2 遍历算法应用
1. 输出二叉树中的结点
可以用三种遍历算法中的任何一种完成,只需要将访问操作具体变为输出操作即可。
/*先序遍历输出二叉树中的结点(根左右)*/
/*中序遍历输出二叉树中的结点(左根右)*/
/*后序遍历输出二叉树中的结点(左右根)*/
2. 输出二叉树中的叶子结点
输出二叉树中的叶子结点与输出二叉树中的结点相比,它是一个有条件的输出问题,即在遍历过程中走到每一个结点时需进行测试,看是否满足叶子结点的条件。
/*先序遍历输出二叉树中的叶子结点(根左右)*/
/*中序遍历输出二叉树中的叶子结点(左根右)*/
/*后序遍历输出二叉树中的叶子结点(左右根)*/
3. 统计叶子结点数目
【方法一】:
统计二叉树中的叶子结点数目并无次序要求,因此可用三种遍历算法中的任何一种完成,只需要将访问操作具体便为判断是否为叶子结点及统计操作即可。
int
【方法二】:
采用分治算法,如果是空树,返回0;如果只有一个结点,返回1;否则为左右子树的叶子结点数之和。
/*分治算法统计叶子结点数目*/
4. 建立二叉链表方式存储的二叉树
给定一棵二叉树,可以得到它的遍历序列;反过来,给定一个遍历序列,也可以创建相应的二叉链表。在这里所说的遍历序列是一种“扩展的遍历序列”,通常用特定的元素表示空子树。
例如:
![87123bda10a1ddb2e0e6fda12f55b0fc.png](https://i-blog.csdnimg.cn/blog_migrate/6e915ec44988b1ce610d482e8e753354.png)
(1)图中的二叉树的“扩展的前序遍历序列”为:AB#DF##G##C#E#H##其中用’#’表示空子树。
/*用扩展先序遍历序列创建二叉链表*/
(2)图中的二叉树的“扩展的中序遍历序列”为:#B#F#D#G#A#C#E#H#,“扩展的后序遍历序列”为:###F##GDB####HECA其中用’#’表示空子树。
虽然书上说“你完全可以用中序或后序遍历的方式实现二叉树的建立,只不过代码里生成结点和构造左右子树的代码顺序交换一下。另外,输入的字符也要做相应的更改。”
但亲测无效。在网上找中序或后序拓展建树一直找不到。感觉没法用中序或后序啊,因为首先就没有根节点,哪里来的左右子树。
5. 求二叉树的高度
【方法一】:
二叉树的高度(深度)为二叉树中结点层次的最大值,也可视为其左、右子树高度的最大值加1。
【算法思想】:
设函数表示二叉树bt的高度,则递归定义如下:
- (1)若bt为空,则高度为0
- (2)若bt非空,其高度应为其左右子树高度的最大值加1
/*后序遍历求二叉树高度的递归算法*/
【方法二】:
求二叉树的高度也可以用前序遍历的方式实现。
【算法思想】:
二叉树的高度(深度)为二叉树中结点层次的最大值。设根结点为第一层的结点,所有h层结点的左、右孩子结点在h+1层,故可以通过遍历计算二叉树中的每个结点的层次,其中最大值即为二叉树的高度。
int
6. 按树状打印二叉树
假设以二叉链表存储的二叉树中,每个结点所含数据元素均为单字母,要求实现如下图的打印结果。
![244ec036a53ece4c009ef347e4a49813.png](https://i-blog.csdnimg.cn/blog_migrate/408f2de6e73eb0e7f871ee23e0e0c1cb.png)
【算法思想】:
(1)二叉树的横向显示应是竖向显示的90°旋转。分析图片可知,这种树形打印格式要求先打印右子树,再打印根,最后打印左子树,由上而下顺序看,其输出的结点序列为CFEADB,这恰为逆中序顺序。解决二叉树的横向显示问题采用“逆中序”遍历框架,所以横向显示算法为先右子树、再根结点、再左子树的RDL结构。
(2)在这种输出格式中,结点的左、右位置与结点的层深有关,故算法中设置了一个表示当前根结点层深的参数,以控制输出结点的左、右位置,每当递归进层时层深+1。
/*按树状打印二叉树*/
ADDITION:
以上函数的调用:
int
![f462dc8bc727503d01a204530c270049.png](https://i-blog.csdnimg.cn/blog_migrate/da0198a147a39bebd0fa67ab42a7b5ea.png)
返回目录:
Chilan Yu:《数据结构》目录链接zhuanlan.zhihu.com![2008b43927ede12ceb72d3b93267766a.png](https://i-blog.csdnimg.cn/blog_migrate/a059ced59fb8c6826b2549bc47e88e60.jpeg)