vx:wxid_tuin1jbu2hs422 (欢迎交流)
代码随想录二叉树章节结束总结
二叉树基础理论
种类:普通二叉树,完全二叉树,二叉搜索树,平衡二叉树
存储方式:链式 / 顺序
遍历方式:
DFS: 递归(前中后),迭代,
递归三部曲:
1:确定返回值、参数
2:确定递归终止条件
3:确定单层递归的逻辑
BFS:层序(借助队列实现 [队列的 size])
定义
class Node{ int val; Node left; Node right; }
二叉树的属性
高度:从上往下数,大 --> 小 :后序遍历求高度
深度:从小往大数,小 --> 大 : 前序求深度,但是可以用后序求最大深度或者最小深度 【根节点的高度就是二叉树的最大深度】
节点数量:后序,借助递归的返回值计算节点数量 / 层序遍历也可以
平衡?:也是借助返回值比较高度差
二叉树的修改与构造
1、中序+后序 / 前序 + 后序 可以唯一确定一个二叉树
二叉搜索树的属性
1、有序(中序遍历是有序数组)
做题心得:
1、对返回值的应用
-
如果需要遍历整个树,且不用处理返回值,则不用(遍历、113.路径总和ii)
-
如果遍历整个树,但是需要处理返回值([236. 二叉树的最近公共祖先])
-
找一个合适的路径必须要返回值(112. 路径总和)
需要返回值:修改二叉树的形状,后序求深度,高度
2、回溯
可以使用回溯遍历整个二叉树的同时,保存路径、值等信息
3、双指针在二叉树的应用
定义一个成员变量,记录当前节点的上一个节点信息,非常有用