File tree Expand file tree Collapse file tree 1 file changed +4
-4
lines changed Expand file tree Collapse file tree 1 file changed +4
-4
lines changed Original file line number Diff line number Diff line change 5252
5353根据路径是否穿过根节点,我们可以将二叉树分为两种:
5454
55- 1 . 直径长度所对应的路径穿过根节点,这种情况下:$\text{二叉树的直径} = \text{左子树高度} + \text{右子树高度}$。
56- 2 . 直径长度所对应的路径不穿过根节点,这种情况下:$\text{二叉树的直径} = \text{所有子树中最大直径长度}$。
55+ 1 . 直径长度所对应的路径穿过根节点,这种情况下: $\text{二叉树的直径} = \text{左子树高度} + \text{右子树高度}$。
56+ 2 . 直径长度所对应的路径不穿过根节点,这种情况下: $\text{二叉树的直径} = \text{所有子树中最大直径长度}$。
5757
58- 也就是说根为 $root$ 的二叉树的直径长度可能来自于 $\text{左子树高度} + \text{右子树高度}$,也可能来自于 $\text{子树中的最大直径}$,即 $\text{二叉树的直径} = max(\text{左子树高度} + \text{右子树高度}, \quad \text{所有子树中最大直径长度})$。
58+ 也就是说根为 $root$ 的二叉树的直径长度可能来自于 $\text{左子树高度} + \text{右子树高度}$,也可能来自于 $\text{子树中的最大直径}$,即 $\text{二叉树的直径} = max(\text{左子树高度} + \text{右子树高度}, \quad \text{所有子树中最大直径长度})$。
5959
6060那么现在问题就变成为如何求「子树的高度」和「子树中的最大直径」。
6161
62621 . 子树的高度:我们可以利用深度优先搜索方法,递归遍历左右子树,并分别返回左右子树的高度。
63- 2 . 子树中的最大直径:我们可以在递归求解子树高度的时候维护一个 $ans$ 变量,用于记录所有 $\text{左子树高度} + \text{右子树高度$ 中的最大值。
63+ 2 . 子树中的最大直径:我们可以在递归求解子树高度的时候维护一个 $ans$ 变量,用于记录所有 $\text{左子树高度} + \text{右子树高度} $ 中的最大值。
6464
6565最终 $ans$ 就是我们所求的该二叉树的最大直径。
6666
You can’t perform that action at this time.
0 commit comments