可以使用递归的方式计算整个二叉树的坡度。我们需要一个辅助函数来计算每个节点的坡度,并在计算的同时返回子树的和。以下是 Python 代码实现:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def findTilt(root: TreeNode) -> int:
total_tilt = 0
def subtree_sum(node):
nonlocal total_tilt
if not node:
return 0
left_sum = subtree_sum(node.left)
right_sum = subtree_sum(node.right)
node_tilt = abs(left_sum - right_sum)
total_tilt += node_tilt
return node.val + left_sum + right_sum
subtree_sum(root)
return total_tilt
代码解析:
-
定义
subtree_sum
递归函数:- 计算当前节点的左子树和右子树的节点总和。
- 计算当前节点的坡度,即
abs(left_sum - right_sum)
。 - 累加坡度到
total_tilt
。
-
递归遍历整棵树:
- 对每个节点进行
subtree_sum
计算。 - 返回最终的
total_tilt
。
- 对每个节点进行
复杂度分析:
- 时间复杂度: O(N),其中 N 是节点数,每个节点遍历一次。
- 空间复杂度: O(H),其中 H 是树的高度,递归调用的栈空间。
这样,我们就可以高效计算整个二叉树的坡度。