mark,這題沒做出來。題目意思是給定一棵樹,每個節點都有一個數字,代表星星的數量,最少需要移動多少次能夠使得每個節點上面的星星數量都爲1。
這題的關鍵是考慮想要定義的遞歸函數的意義是什麼。我們將問題進行分解,一共需要移動多少次,其實等價於每個節點出去或進來的次數的總和。那麼我們就可以定義遞歸函數爲針對該節點其出去或進來的次數。這個次數就相當於左右節點的次數 加上 root.val -1。其中 root.val -1 代表着需要更上層節點輸入或輸出多少。題解中說明可以理解爲過載量。
# 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):
result = 0
def temp(self,root):
if root == None:
return 0
left_value = self.temp(root.left)
right_value = self.temp(root.right)
self.result += abs(left_value) + abs(right_value)
return left_value + right_value + root.val - 1
def distributeCoins(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.temp(root)
return self.result