文章目录
- 1.二叉树遍历的问题提出
- 2.先序遍历算法
- 3.中序遍历算法
- 3.后序遍历算法
- 4.二叉树的层次遍历
- 5.二叉树遍历算法的应用举例
1.二叉树遍历的问题提出
- 顺着某一条搜索路径巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。
- 常见的遍历方式有:
(1)递归遍历
(2)层次遍历
(3)非递归遍历:使用堆栈
2.先序遍历算法
- 若二叉树非空,则,
(1)访问根结点;
(2)先序遍历左子树:递归式
(3)先序遍历右子树:递归式 - 二叉树先序遍历算法的实现
- 二叉树的递归遍历 | 先序遍历DLR:即根左右,根左子树、右子树
3.中序遍历算法
- 若二叉树非空,则,
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树。 - 二叉树中序遍历算法的实现
- 二叉树的递归遍历 | 中序遍历DLR:即左根右,即:左子树,根,右子树
3.后序遍历算法
- 若二叉树非空,则,
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点。 - 二叉树后序遍历算法的实现
- 二叉树的递归遍历 | 后序遍历DLR:即左根右,即:左右根,即左子树,右子树,根
4.二叉树的层次遍历
- 思想:从根节点点开始,从上到下,从左到右逐层的进行遍历
- 二叉树层次遍历算法的实现
5.二叉树遍历算法的应用举例
(1)建立二叉树(先序和中序,中序和后序也可以建立一颗二叉树)
(2)统计二叉树中叶子结点的个数(先序遍历)
(3)求二叉树的深度(后序遍历)
- (1)建立二叉树(先序和中序)
- 利用先序序列和中序序列确定一颗二叉树
- 利用先序和后序构建二叉树的算法:先理解上面的eg,再看下面的代码就懂了
- (2)二叉树中叶结点统计
先序(中序或后序)遍历二叉树,在遍历过程中查找叶结点,将算法中“访问结点”的操作改为: 判叶结点。
思路:使用分治思想,因为叶子节点的左右节点为空,只有根;
所以:左子树的叶子节点的个数+右子树的叶子节点的个数 - 代码如下:
- (3)二叉树的深度
空树:深度=0
左右子树为空:深度=1
其它 :深度=1+max(左子树深度,右子树深度),这里的1代表根节点
思想:利用分治思想,递归 - 代码如下: