給定乙個有 n 個結點的二叉樹的根結點 root,樹中的每個結點上都對應有 node.val 枚硬幣,並且總共有 n 枚硬幣。
在一次移動中,我們可以選擇兩個相鄰的結點,然後將一枚硬幣從其中乙個結點移動到另乙個結點。(移動可以是從父結點到子結點,或者從子結點移動到父結點。)。
返回使每個結點上只有一枚硬幣所需的移動次數。
示例 1:
輸入:[3,0,0]
輸出:2
解釋:從樹的根結點開始,我們將一枚硬幣移到它的左子結點上,一枚硬幣移到它的右子結點上。
示例 2:
輸入:[0,3,0]
輸出:3
解釋:從根結點的左子結點開始,我們將兩枚硬幣移到根結點上 [移動兩次]。然後,我們把一枚硬幣從根結點移到右子結點上。
示例 3:
輸入:[1,0,2]
輸出:2
示例 4:
輸入:[1,0,0,null,3]
輸出:4
1.只記向上給出硬幣,計算每個節點需要給出的硬幣數(如果為負數則表示需要得到的硬幣數)。不管得到還是給出,它們的絕對值都代表要移動的次數,故硬幣總共需要移動的次數=所有節點需要給出的硬幣數的絕對值之和。2.每個節點需要給出的硬幣數=左孩子需要給出的硬幣數+右孩子需要給出的硬幣數+自己的硬幣數-1。
3.由於要計算節點需要給出的硬幣數,首先需要求出左右孩子需要給出的硬幣數,故使用後序遍歷。
private int res=0;
public int helper(treenode node)
public int distributecoins(treenode root)
leetcode 979 在二叉樹中分配硬幣
給定乙個有 n 個結點的二叉樹的根結點 root,樹中的每個結點上都對應有 node.val 枚硬幣,並且總共有 n 枚硬幣。在一次移動中,我們可以選擇兩個相鄰的結點,然後將一枚硬幣從其中乙個結點移動到另乙個結點。移動可以是從父結點到子結點,或者從子結點移動到父結點。返回使每個結點上只有一枚硬幣所需...
在二叉樹中分配硬幣
給定乙個有 n 個結點的二叉樹的根結點 root,樹中的每個結點上都對應有 node.val 枚硬幣,並且總共有 n 枚硬幣。在一次移動中,我們可以選擇兩個相鄰的結點,然後將一枚硬幣從其中乙個結點移動到另乙個結點。移動可以是從父結點到子結點,或者從子結點移動到父結點。返回使每個結點上只有一枚硬幣所需...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...