Skip to content

Commit

Permalink
Update 0687. 最长同值路径.md
Browse files Browse the repository at this point in the history
  • Loading branch information
itcharge committed Sep 19, 2023
1 parent f218099 commit fb67509
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions Solutions/0687. 最长同值路径.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,30 +48,30 @@

根据路径是否穿过根节点,我们可以将二叉树分为两种:

1. 直径长度所对应的路径穿过根节点,这种情况下:$二叉树的直径 = 左子树高度 + 右子树高度$。
2. 直径长度所对应的路径不穿过根节点,这种情况下:$二叉树的直径 = 所有子树中最大直径长度$。
1. 直径长度所对应的路径穿过根节点,这种情况下:$\text{二叉树的直径} = \text{左子树高度} + \text{右子树高度}$。
2. 直径长度所对应的路径不穿过根节点,这种情况下:$\text{二叉树的直径} = \text{所有子树中最大直径长度}$。

也就是说根为 $root$ 的二叉树的直径长度可能来自于 $左子树高度 + 右子树高度$,也可能来自于 $子树中的最大直径$,即 $二叉树的直径 = max(左子树高度 + 右子树高度, \quad 所有子树中最大直径长度)$。
也就是说根为 $root$ 的二叉树的直径长度可能来自于 $\text{左子树高度} + \text{右子树高度}$,也可能来自于 $\text{子树中的最大直径}$,即 $\text{二叉树的直径} = max(\text{左子树高度} + \text{右子树高度}, \quad \text{所有子树中最大直径长度})$。

那么现在问题就变成为如何求「子树的高度」和「子树中的最大直径」。

1. 子树的高度:我们可以利用深度优先搜索方法,递归遍历左右子树,并分别返回左右子树的高度。
2. 子树中的最大直径:我们可以在递归求解子树高度的时候维护一个 $ans$ 变量,用于记录所有 $左子树高度 + 右子树高度$ 中的最大值。
2. 子树中的最大直径:我们可以在递归求解子树高度的时候维护一个 $ans$ 变量,用于记录所有 $\text{左子树高度} + \text{右子树高度$ 中的最大值。

最终 $ans$ 就是我们所求的该二叉树的最大直径。

接下来我们再来加上「路径中每个节点具有相同值」这个限制条件。

1. 「左子树高度」应变为「左子树最长同值路径长度」。
2. 「右子树高度」应变为「右子树最长同值路径长度」。
3. 题目变为求「二叉树的最长同值路径长度」,式子为:$二叉树的最长同值路径长度 = max(左子树最长同值路径长度 + 右子树最长同值路径长度, \quad 所有子树中最长同值路径长度)$。
3. 题目变为求「二叉树的最长同值路径长度」,式子为:$\text{二叉树的最长同值路径长度} = max(\text{左子树最长同值路径长度} + \text{右子树最长同值路径长度}, \quad \text{所有子树中最长同值路径长度})$。

在递归遍历的时候,我们还需要当前节点与左右子节点的值的相同情况,来维护更新「包含当前节点的最长同值路径长度」。

1. 在递归遍历左子树时,如果当前节点与左子树的值相同,则:$包含当前节点向左的最长同值路径长度 = 左子树最长同值路径长度 + 1$,否则为 $0$。
2. 在递归遍历左子树时,如果当前节点与左子树的值相同,则:$包含当前节点向右的最长同值路径长度 = 右子树最长同值路径长度 + 1$,否则为 $0$。
1. 在递归遍历左子树时,如果当前节点与左子树的值相同,则:$\text{包含当前节点向左的最长同值路径长度} = \text{左子树最长同值路径长度} + 1$,否则为 $0$。
2. 在递归遍历左子树时,如果当前节点与左子树的值相同,则:$\text{包含当前节点向右的最长同值路径长度} = \text{右子树最长同值路径长度} + 1$,否则为 $0$。

则:$包含当前节点向左的最长同值路径长度 = max(包含当前节点向左的最长同值路径长度, \quad 包含当前节点向右的最长同值路径长度)$。
则:$\text{包含当前节点向左的最长同值路径长度} = max(\text{包含当前节点向左的最长同值路径长度}, \quad \text{包含当前节点向右的最长同值路径长度})$。

### 思路 1:代码

Expand Down

0 comments on commit fb67509

Please sign in to comment.