題目描述
給定一個二叉樹,計算整個樹的坡度。
一個樹的節點的坡度定義即爲,該節點左子樹的結點之和和右子樹結點之和的差的絕對值。空結點的的坡度是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