题目描述
给定一个二叉树,计算整个树的坡度。
一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是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