树与二叉树(3)

遍历

1.遍历定义

在这里插入图片描述

2.遍历目的

得到树中所有结点的一个线性排列

3.遍历方式

在这里插入图片描述
用二叉树表示算术表达式,三种遍历方式的遍历结果:
先序遍历得到的是表达式的前缀表示
中序遍历得到的是表达式的中缀表示(这个是我们经常用到的)
后序遍历得到的是表达式的后缀表示

4.遍历结果的特点

在这里插入图片描述

5.1通过遍历后的结果确定树例题1

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.2通过遍历后的结果确定树例题2

在这里插入图片描述

6.二叉树先序遍历算法

在这里插入图片描述

7.二叉树中序遍历算法

在这里插入图片描述

8.二叉树后序遍历算法

在这里插入图片描述
如果去掉visit()语句,从递归的角度看,三种算法是完全相同的,或者说这三种算法的访问路径是相同的,只是访问根结点的时机不同
所以三者的时间复杂度都是一样的,都是O(n)

9.遍历二叉树的非递归算法

基本思想:
①建立一个栈
②根结点进栈,遍历左子树
③根结点出栈,输出根结点,遍历右子树。
在这里插入图片描述
注意while的条件是||而不是&&

10.层次遍历法

我们之前学的遍历方法都是把二叉树分成左子树,根结点,右子树这三个部分。而层次遍历是把树看成从上到下的若干层。从根结点开始,按从上到下,从左到右的顺序访问每一个结点,每个结点仅访问一次。

在这里插入图片描述

在这里插入图片描述

11.1 二叉树遍历算法的应用——二叉树的建立

先序遍历法
在这里插入图片描述

11. 2二叉树遍历算法的应用——复制二叉树

在这里插入图片描述

11. 3二叉树遍历算法的应用——计算二叉树深度

在这里插入图片描述

11.4 二叉树遍历算法的应用——计算二叉树结点总数

在这里插入图片描述

11. 5二叉树遍历算法的应用——计算二叉树叶子结点数

在这里插入图片描述

12.线索二叉树

(1)为何要研究线索二叉树?

在这里插入图片描述

(2)如何寻找特定遍历序列中二叉树结点的前驱和后继

在这里插入图片描述
回顾二叉树链表中空指针域的数量
在这里插入图片描述

(3)线索,线索二叉树,线索化的定义

在这里插入图片描述

(4)使用的例子

在这里插入图片描述
为了区分到底是指向孩子还是指向前驱或后继,这里约定了一个方法
在这里插入图片描述

(5)结点的结构为

在这里插入图片描述

(6)先序线索二叉树

在这里插入图片描述

(7)中序线索二叉树

在这里插入图片描述

(8)后序线索二叉树

在这里插入图片描述

(9)一个小练习

在这里插入图片描述
在这里H左孩子指针和G的右孩子指针可以为空,也可以指向头结点
在这里插入图片描述
类似于循环链表。

猜你喜欢

转载自blog.csdn.net/afdafvdaa/article/details/109738147