通俗易懂讲解树形DP

本文介绍了树形动态规划的概念,强调了动态规划与二叉树问题的结合,特别是如何利用后序遍历来解决这类问题。树形DP的关键在于后序遍历和无后效性,通过增加维度来避免分类讨论。以LeetCode 298题为例,展示了树形问题的典型求解思路。
摘要由CSDN通过智能技术生成

在做二叉树的题目的时候,如果你觉得和动态规划有点像,那就用动态规划的思想来做,然后树的遍历是后序遍历的,和动态规划由底向上的思想不谋而合

「动态规划」同样可以作用在树形结构上,这样的问题被称为树形 DP 问题。

我们知道树形结构的特点是:只有一个根结点,因此 先计算深层结点的值,然后递推计算浅层结点的值是树形 dp 问题常见的求解思路,即 后序遍历。并且为了使得求解问题的过程呈现明显的阶段特征,满足 无后效性,通常在结点后面需要增加一维状态,表示「结点选择」或者「结点没有选择」。

因此树形 DP 问题的重要求解思想:

后序遍历:

先计算出左、右子树的结果,然后一层一层向上传递,到根结点返回。

无后效性:

增加维度避免分类讨论。

树形问题典型的求解思路是:

自底向上求解,即:先解决最后一层结点的问题,然后一层一层向上递推,从小树到大树,最后在根结点汇总。一层一层向上汇报求解结果是典型的 后序遍历 的思想。自底向上递推求解是树形 dp 问题的求解阶段,是状态的第一维(在代码中这个维度并不明显)。

leetcode298 二叉树最长连续序列

这里还自定义了一个父节点,真是太6666了


class Solutio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值