日野弥生:勉強しよう

LeetCode 563 - 二叉树的坡度

发表于2025年03月05日

#树 #二叉树 #深度优先搜索

递归解题,整体思路都是后根遍历,先求出左右子树的结果,再对直径进行计算。

本题关键点在于正确地理解二叉树的坡度,每个节点的坡度值之间是互不干扰的,都是借由左右子树的sum值的差的绝对值求出。

class Solution:
    def findTilt(self, root: Optional[TreeNode]) -> int:
        sumTilt = 0
        def findTiltImpl(root: Optional[TreeNode]):
            nonlocal sumTilt
            if not root:
                return 0
            left = findTiltImpl(root.left)
            right = findTiltImpl(root.right)

            # 借由左右子树的value值的总和的差的绝对值求出
            currTilt = abs(left - right)

            # 加和到总数中
            sumTilt += currTilt

            # 这里需要把左右子树和根节点的value值加和到一起变成根节点的值向上传递
            return left + right + root.val
        ret = findTiltImpl(root)
        return sumTilt

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/binary-tree-tilt/

上一篇

LeetCode 543 - 二叉树的直径

下一篇

LeetCode 111 - 二叉树的最小深度