文章目录
1. 算法流程 (4步)
可以解决面试中绝大多数的二叉树问题,尤其是树型dp问题。
步骤如下:
加深理解:
- 一方面,其本质上是利用递归后序遍历去解决问题,因为后序遍历是
左右根
,这样才能先知道左右树的信息,再去处理当前结点。【当然同理“右左根”也行,只需要保证根在最后即可】- 从另一方面看,每次将左右子树的信息整合并返回后,该左右子树的信息就不要了。这又是动态规划的思想。
2. 第二步中的3种情况
2.1 左子树怎样,右子树怎样,且左右子树间满足某种条件
技巧:通常是问什么,左右子树就是什么,然后去找左右子树的约束条件
例题:
2.2 讨论与x有关和与x无关两种情况
在第2步中,常常将情况分为两类:
- 与x有关…
- 与x无关…
小细节:写于编写x有关无关的代码时,将无条件的代码放在前面,将有条件的代码放在后面。如果都有条件或都无条件则无先后顺序。
例题:
3. 第四步中的2种常用手法
在第4步中,关于递归边界:
- 如果Info的所有字段值都好设置,则直接设置:
if(root == null) return new Node(设置信息);
- 如果Info的部分字段值不好设置,则返回null:
if(root == null) return null;
。其处理逻辑如下:
例题:
4. 推广到解决n叉树
例题: