日野弥生:勉強しよう
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