563. 二叉树的坡度

exiaohu 于 2021-11-18 发布

题目链接: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