题目描述

给定二叉树的根节点 root,找出存在于 不同 节点 A 和 B 之间的最大值 V,其中 V = |A.val - B.val|,且 A 是 B 的祖先。

(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)

思路

对于整棵树,我们可以做 DFS,在 DFS 的时候记录当前树的最大值和最小值,返回最大值和最小值的差。

那么在 dfs 的时候,我们需要在参数中设置节点、当前树的最大值和最小值;返回最大值和最小值的差。

最终代码:

class Solution:
 
    def maxAncestorDiff(self, root: Optional[TreeNode]) -> int:
        def dfs(node: TreeNode, mi: int, ma: int):
            if not node:
                return 0
            diff = max(abs(node.val-mi), abs(node.val-ma))
            mi = min(mi, node.val)
            ma = max(ma, node.val)
            diff = max(dfs(node.left, mi, ma), diff)
            diff = max(dfs(node.right, mi, ma), diff)
            return diff
        return dfs(root, root.val, root.val)

想得太多

  • 忘了更新 max 和 min 的值;
  • 更新差值是用 abs 算的,我想的太麻烦了。
  • 因为对于 null 直接返回 0,因此不需要判断左右节点是否为 None。
  • 更新最大值的时候把 ma 写成 mi 了。