题目链接:563. 二叉树的坡度
二叉树的遍历,递归方式。空间复杂度差强人意,不过能正确地计算出结果。
# 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 diff(self, root: TreeNode):
if root.left is not None and root.right is not None:
root.val = abs(root.left.val - root.right.val)
self.diff(root.left)
self.diff(root.right)
elif root.left is not None:
root.val = abs(root.left.val)
self.diff(root.left)
elif root.right is not None:
root.val = abs(root.right.val)
self.diff(root.right)
else:
root.val = 0
def sum(self, root: TreeNode):
if root.left is not None:
self.sum(root.left)
root.val += root.left.val
if root.right is not None:
self.sum(root.right)
root.val += root.right.val
def findTilt(self, root: TreeNode) -> int:
if root is None:
return 0
self.sum(root)
self.diff(root)
self.sum(root)
return root.val