本周学习了二叉树相关内容,较为深刻的了解了dfs的整个过程和各种题目的思考方向。
基础
二叉树中最基础的内容为递归序遍历dfs和层序遍历bfs,之后的各种题目都是对这两种方式的应用
- dfs 深度优先搜索,对于树来说就是递归序遍历,对于树上的每个节点,访问的时机有三个,第一次遇到,从左孩子返回(第二次遇到),从右孩子返回(第三次遇到,即将退出该节点)。也就是说,处理每个节点的时机也是这三个时机。
- bfs 广度优先搜索,对于树来说是层序遍历,通过队列实现,每次处理一层,每层处理一个。
递归序应用思路
- 局部 + 递归子树
- 遍历处理每个节点,可能要回溯
需要注意的细节
- 典型的求节点个数的问题如果用递归序的两种思路
1.可用任意递归序遍历,因为每种递归序均只统计一次,所以没有回溯的问题,或者说你回到上层本来就需要下层的影响(下层统计自己的节点数)
2. 典型的树形DP问题,用后序思路处理 - 回溯(显式或隐式)的典型问题有求节点深度和路径,以删去子节点处理的对于接收变量(如列表)的影响,我的具体实现是离开当前节点时删除当前节点对接收变量的影响
- 局部变量与相对全局变量 可变类型与非可变类型
- 递归函数的成员变量,函数参数与返回值