【力扣日记】563 二叉树的坡度 | BFS

题目描述

给定一个二叉树,计算整个树的坡度。

一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。

整个树的坡度就是其所有节点的坡度之和。

算法思路

二叉树天然适合递归。

1、对单独的根节点,return 0
2、对叶节点,返回节点值return root.val
3、正常的返回值即是 左节点的和+右节点的和+当前节点的值

算法:

class Solution:
    du=0
    def findTilt(self, root: TreeNode) -> int:
        def BFS(root):
            if not root:return 0
            if not (root.left or root.right) :return root.val
            l=BFS(root.left)
            r=BFS(root.right)
            self.du+=abs(l-r)
            # print(l,r,l-r)
            return l+r+root.val
        BFS(root)
        return self.du

执行用时 :72 ms, 在所有 Python3 提交中击败了49.17%的用户
内存消耗 :15.8 MB, 在所有 Python3 提交中击败了9.58%的用户

简化:

class Solution:
    def findTilt(self, root: TreeNode) -> int:
        self.s = 0
        def slope(node):
            if node is None:
                return 0
            l = slope(node.left)
            r = slope(node.right)
            
            self.s += abs(l - r)
            return node.val + l + r
        slope(root)
        return self.s
发布了210 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/104823209