Open youngyangyang04 opened 3 months ago
复习
二叉树的遍历方式
- 深度优先遍历:递归遍历、迭代遍历、统一迭代法
- 广度优先遍历:层序遍历
二叉树的属性
- 二叉树:是否对称。后序,比较的是根节点的左子树与右子树是不是相互翻转
- 二叉树:求最大深度。后序,求根节点最大高度就是最大深度,通过递归函数的返回值做计算树的高度
- 二叉树:求最小深度。后序,求根节点最小高度就是最小深度,注意最小深度的定义
- 二叉树:求有多少个节点。后序,通过递归函数的返回值计算节点数量
- 二叉树:是否平衡。后序,注意后序求高度和前序求深度,递归过程判断高度差
- 二叉树:找所有路径。前序,方便让父节点指向子节点,涉及回溯处理根节点到叶子的所有路径
- 二叉树:求左叶子之和。后序,必须三层约束条件,才能判断是否是左叶子。
- 二叉树:求左下角的值。顺序无所谓,优先左孩子搜索,同时找深度最大的叶子节点。
- 二叉树:求路径总和。顺序无所谓,递归函数返回值为 bool 类型是为了搜索一条边,没有返回值是搜索整棵树。
二叉树的修改与构造
- 翻转二叉树。前序,交换左右孩子
- 构造二叉树。前序,重点在于找分割点,分左右区间构造
- 构造最大的二叉树。前序,分割点为数组最大值,分左右区间构造
- 合并两个二叉树。前序,同时操作两个树的节点,注意合并的规则
二叉搜索树的属性
- 二叉搜索树中的搜索。二叉搜索树的递归是有方向的
- 是不是二叉搜索树。中序,相当于变成了判断一个序列是不是递增的
- 求二叉搜索树的最小绝对差。中序,双指针操作
- 求二叉搜索树的众数。中序,清空结果集的技巧,遍历一遍便可求众数集合
- 二叉搜索树转成累加树。中序,双指针操作累加
二叉搜索树的修改与构造
- 二叉搜索树中的插入操作。顺序无所谓,通过递归函数返回值添加节点
- 二叉搜索树中的删除操作。前序,想清楚删除非叶子节点的情况
- 修剪二叉搜索树。前序,通过递归函数返回值删除节点
- 构造二叉搜索树。前序,数组中间节点分割
二叉树公共祖先问题
- 二叉树的公共祖先问题。后序,回溯,找到左子树出现目标值,右子树节点目标值的节点。
- 二叉搜索树的公共祖先问题。顺序无所谓,如果节点的数值在目标区间就是最近公共祖先
https://www.programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E6%80%BB%E7%BB%93%E7%AF%87.html