想法:
二叉树的tilt,意思是指左右子树value总和的差值。我们可以利用深度优先算法遍历二叉树,在过程中记录每个node的tilt,并把它们加起来。
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findTilt(self, root: Optional[TreeNode]) -> int:
#记录tilt的总和
self.tilt = 0
#深度优先算法,计算一个node的value总和
def dfs(root):
#如果没有node,那么value为0
if not root: return 0
#计算左子树的value总和
left = dfs(root.left)
#计算右子树的value总和
right = dfs(root.right)
#node的tilt等于左右子树value总和的差值
self.tilt += abs(left - right)
#一个node的value总和等于左子树的value加右子树的value,加上node的value
return left + right + root.val
dfs(root)
return self.tilt