Skip to content

Commit

Permalink
Update 01.Tree-DP.md
Browse files Browse the repository at this point in the history
  • Loading branch information
itcharge committed Sep 15, 2023
1 parent e1c744f commit d41dea7
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions Contents/10.Dynamic-Programming/06.Tree-DP/01.Tree-DP.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,11 @@
1. 最大路径和中对应路径穿过根节点。
2. 最大路径和中对应路径不穿过根节点。

如果最大路径和中对应路径穿过根节点,则:$该二叉树的最大路径和 = 左子树中最大贡献值 + 右子树中最大贡献值 + 当前节点值$
如果最大路径和中对应路径穿过根节点,则:**该二叉树的最大路径和 = 左子树中最大贡献值 + 右子树中最大贡献值 + 当前节点值**

而如果最大路径和中对应路径不穿过根节点,则:$该二叉树的最大路径和 = 所有子树中最大路径和$
而如果最大路径和中对应路径不穿过根节点,则:**该二叉树的最大路径和 = 所有子树中最大路径和**

即:$该二叉树的最大路径和 = max(左子树中最大贡献值 + 右子树中最大贡献值 + 当前节点值, \quad 所有子树中最大路径和)$
即:**该二叉树的最大路径和 = max(左子树中最大贡献值 + 右子树中最大贡献值 + 当前节点值所有子树中最大路径和)**

对此我们可以使用深度优先搜索递归遍历二叉树,并在递归遍历的同时,维护一个最大路径和变量 $ans$。

Expand All @@ -99,7 +99,7 @@
2. 递归计算左子树的最大贡献值为 $left\underline{}max$。
3. 递归计算右子树的最大贡献值为 $right\underline{}max$。
4. 更新维护最大路径和变量,即 $self.ans = max \lbrace self.ans, \quad left\underline{}max + right\underline{}max + node.val \rbrace$。
5. 返回以当前节点为根节点,并且经过该节点的最大贡献值。即返回 $当前节点值 + 左右子节点提供的最大贡献值中较大的一个$
5. 返回以当前节点为根节点,并且经过该节点的最大贡献值。即返回 **当前节点值 + 左右子节点提供的最大贡献值中较大的一个**
6. 最终 $self.ans$ 即为答案。

##### 思路 1:代码
Expand Down Expand Up @@ -190,10 +190,10 @@ class Solution:

对于根节点为 $u$ 的树来说:

1. 如果其最长路径经过根节点 $u$,则 $最长路径长度 = 某子树中的最长路径长度 + 另一子树中的最长路径长度 + 1$
2. 如果其最长路径不经过根节点 $u$,则 $最长路径长度 = 某个子树中的最长路径长度$
1. 如果其最长路径经过根节点 $u$,则**最长路径长度 = 某子树中的最长路径长度 + 另一子树中的最长路径长度 + 1**
2. 如果其最长路径不经过根节点 $u$,则**最长路径长度 = 某个子树中的最长路径长度**

即:$最长路径长度 = max(某子树中的最长路径长度 + 另一子树中的最长路径长度 + 1, \quad 某个子树中的最长路径长度)$
即:**最长路径长度 = max(某子树中的最长路径长度 + 另一子树中的最长路径长度 + 1某个子树中的最长路径长度)**

对此,我们可以使用深度优先搜索递归遍历 $u$ 的所有相邻节点 $v$,并在递归遍历的同时,维护一个全局最大路径和变量 $ans$,以及当前节点 $u$ 的最大路径长度变量 $u\underline{}len$。

Expand All @@ -203,7 +203,7 @@ class Solution:

因为题目限定了「相邻节点字符不同」,所以在更新全局最长路径长度和当前节点 $u$ 的最长路径长度时,我们需要判断一下节点 $u$ 与相邻节点 $v$ 的字符是否相同,只有在字符不同的条件下,才能够更新维护。

最后,因为题目要求的是树的直径(树的最长路径长度)中的节点个数,而:$路径的节点 = 路径长度 + 1$,所以最后我们返回 $self.ans + 1$ 作为答案。
最后,因为题目要求的是树的直径(树的最长路径长度)中的节点个数,而:**路径的节点 = 路径长度 + 1**,所以最后我们返回 $self.ans + 1$ 作为答案。

##### 思路 1:代码

Expand Down

0 comments on commit d41dea7

Please sign in to comment.