073:二叉树的直径

LeetCode 543 https://leetcode.cn/problems/diameter-of-binary-tree/description/ 难度:简单 树形 DP 中的直径 DP。 链:从子树中的叶子节点到当前节点的路径。把最长链的长度,作为 dfs 的返回值。根据这一定义,空节点的链长是 −1,叶子节点的链长是 0。 直径:等价于由两条(或者一条)链拼成的路径。我们枚举每个 node,假设直径在这里「拐弯」,也就是计算由左右两条从下面的叶子节点到 node 的链的节点值之和,去更新答案的最大值。 直径可能在下面的某个节点拐弯,不一定经过树根 root。 dfs 返回的是链的长度,不是直径的长度。如果返回直径,那么上面与其他的链继续拼接,得到的就不是直径了。 dfs 返回的是当前子树的最大链长(也可以理解为子树的高度),不包含当前节点和其父节点的这条边。 时间复杂度:O(n),其中 n 为二叉树的节点个数。 空间复杂度:O(n)。最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。 ...

七月 4, 2025 · Cassius

032:二叉树中的最大路径和

LeetCode 124 https://leetcode.cn/problems/binary-tree-maximum-path-sum/description/ 难度:困难 这道题是树形 DP 中的直径 DP。枚举直径拐弯的位置,在每一个拐弯的位置更新答案,将以当前节点为根的链的最大路径和返回给父节点,如果路径和为负数返回 0。 边界条件是空节点的路径和为 0。 需要注意的是,更新答案的是直接的路径和,而返回的是链的路径和。 时间复杂度:O(n),其中 n 为二叉树的节点个数。 空间复杂度:O(n)。最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。 ...

六月 30, 2025 · Cassius