在做二叉树的题目的时候,如果你觉得和动态规划有点像,那就用动态规划的思想来做,然后树的遍历是后序遍历的,和动态规划由底向上的思想不谋而合
「动态规划」同样可以作用在树形结构上,这样的问题被称为树形 DP 问题。
我们知道树形结构的特点是:只有一个根结点,因此 先计算深层结点的值,然后递推计算浅层结点的值是树形 dp 问题常见的求解思路,即 后序遍历。并且为了使得求解问题的过程呈现明显的阶段特征,满足 无后效性,通常在结点后面需要增加一维状态,表示「结点选择」或者「结点没有选择」。
因此树形 DP 问题的重要求解思想:
后序遍历:
先计算出左、右子树的结果,然后一层一层向上传递,到根结点返回。
无后效性:
增加维度避免分类讨论。
树形问题典型的求解思路是:
自底向上求解,即:先解决最后一层结点的问题,然后一层一层向上递推,从小树到大树,最后在根结点汇总。一层一层向上汇报求解结果是典型的 后序遍历 的思想。自底向上递推求解是树形 dp 问题的求解阶段,是状态的第一维(在代码中这个维度并不明显)。
leetcode298 二叉树最长连续序列
这里还自定义了一个父节点,真是太6666了
class Solutio