【力扣日記】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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章