遍历
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的右孩子指针可以为空,也可以指向头结点
类似于循环链表。