leetcode 979

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章