給定乙個二叉樹,計算整個樹的坡度。
乙個樹的節點的坡度定義即為,該節點左子樹的結點之和和右子樹結點之和的差的絕對值。空結點的的坡度是0。
整個樹的坡度就是其所有節點的坡度之和。
示例:
輸入:
1/ \
2 3
輸出: 1
解釋:
結點的坡度 2 : 0
結點的坡度 3 : 0
結點的坡度 1 : |2-3| = 1
樹的坡度 : 0 + 0 + 1 = 1
注意:
任何子樹的結點的和不會超過32位整數的範圍。
坡度的值不會超過32位整數的範圍。
後序遍歷,樹形dp,每個結點儲存左子樹結點之和、右子樹結點之和、本結點tilt
時間》48.18%
空間》6.35%
# definition for a binary tree node.
# class treenode(object):
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution
(object):
deffindtilt
(self, root)
:"""
:type root: treenode
:rtype: int
"""ifnot root:
return
0 node_info =
stack =[(
0, root)
]while stack:
stat, p = stack.pop(
)if stat ==0:
(1, p)
)if p.left:(0
, p.left)
)if p.right:(0
, p.right)
)else
:if p.left and p.right:
left_sum =
sum(node_info[p.left][:
2])+ p.left.val
right_sum =
sum(node_info[p.right][:
2])+ p.right.val
tilt =
abs(left_sum - right_sum)
node_info[p]
=[left_sum, right_sum, tilt]
elif p.left:
left_sum =
sum(node_info[p.left][:
2])+ p.left.val
right_sum =
0 tilt =
abs(left_sum - right_sum)
node_info[p]
=[left_sum, right_sum, tilt]
elif p.right:
left_sum =
0 right_sum =
sum(node_info[p.right][:
2])+ p.right.val
tilt =
abs(left_sum - right_sum)
node_info[p]
=[left_sum, right_sum, tilt]
else
: node_info[p]=[
0,0,
0]tree_tilt =
0for node, val_list in node_info.items():
tree_tilt += val_list[2]
return tree_tilt
LeetCode 563 二叉樹的坡度
題目鏈結 題目描述 給定乙個二叉樹,計算整個樹的坡度。乙個樹的節點的坡度定義即為,該節點左子樹的結點之和和右子樹結點之和的差的絕對值。空結點的的坡度是0。整個樹的坡度就是其所有節點的坡度之和。示例 輸入 1 2 3輸出 1 解釋 結點的坡度 2 0 結點的坡度 3 0 結點的坡度 1 2 3 1 樹...
Leetcode 563 二叉樹的坡度
給定乙個二叉樹,計算整個樹的坡度。乙個樹的節點的坡度定義即為,該節點左子樹的結點之和和右子樹結點之和的差的絕對值。空結點的的坡度是0。整個樹的坡度就是其所有節點的坡度之和。示例 輸入 1 2 3輸出 1解釋 結點的坡度 2 0 結點的坡度 3 0 結點的坡度 1 2 3 1 樹的坡度 0 0 1 1...
LeetCode 563 二叉樹的坡度
題目 給定乙個二叉樹,計算整個樹的坡度。乙個樹的節點的坡度定義即為,該節點左子樹的結點之和和右子樹結點之和的差的絕對值。空結點的的坡度是0。整個樹的坡度就是其所有節點的坡度之和。示例 輸入 1 2 3 輸出 1 解釋 結點的坡度 2 0 結點的坡度 3 0 結點的坡度 1 2 3 1樹的坡度 0 0...