leetcode 563 二叉樹的坡度

2021-09-29 20:39:52 字數 2048 閱讀 1727

給定乙個二叉樹,計算整個樹的坡度。

乙個樹的節點的坡度定義即為,該節點左子樹的結點之和和右子樹結點之和的差的絕對值。空結點的的坡度是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...