二叉树
概述
- 二叉树的
先序遍历
、中序遍历
、后序遍历
以及层序遍历
是所有二叉树相关算法题的基础 - 遇到二叉树相关的问题,首先想到的肯定是
递归
二叉树的遍历
- 前、中、后序遍历方式的递归写法相对简单,但是
迭代法
也需要掌握迭代法
求解前序遍历
的方式与层序遍历相同,区别在于
(1)将队列
改为栈
(2)插入时先插入右子节点
再插入左子节点
前序遍历
中要访问的元素和要处理的元素是一致的,中序
和后序
遍历中要访问的元素和要处理的元素是不一致的,因此在迭代中会带来困难
(1)访问:
遍历节点
(2)处理:
将该节点的值加入结果数组中后序遍历
和前序遍历
的序列之间是有关系的,因此只需要在前序遍历
迭代代码中将左右子树加入顺序翻转,然后再将结果数组翻转即可参考连接1
中提供了一种统一的迭代解法
- 层序遍历首先想到的就是用
队列
来存储节点102. 二叉树的层序遍历
只需要使用单层while
循环即可
序列化与反序列化
先序
+中序
或后序
+中序
可以构建二叉树,但二叉树中不能出现值重复的结点,否则无法创建- 另一种序列化方式遇到
nullptr
用特殊字符替代
二叉树+回溯
二叉排序树
- 二叉排序树是一种特殊的二叉树,左子树的所有结点值小于根结点,右子树的所有结点值大于根结点
序列化与反序列化
- 根据二叉排序树的
先序
、后序
遍历序列都是可以进行反序列化重建唯一的二叉排序树,可以使用递归或单调栈完成中序
遍历序列构建的二叉排序树不唯一,但一般要求创建平衡的二叉排序树(仍然不唯一),递归+二分法
- 判断二叉排序树的中序遍历序列很简单,不用考虑
- 判断是否是先序或后续序遍历序列时,考虑使用基本解法即
递归法
、高级解法可以使用单调栈
(1)递归方式是通过逐渐地确定左右子树的左右边界来递归完成