979 在二叉樹中分配硬幣

2022-07-02 11:24:11 字數 1157 閱讀 1279

給定乙個有 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的所在子樹...