人人有獎 在二元樹中分配硬幣(圖論應用) Leetcode #979

更新於 2024/05/19閱讀時間約 5 分鐘

題目敘述

題目給定一棵二元樹,整棵樹剛好有n個節點 和 總共n枚金幣
每個節點的值代表該節點初始擁有金幣的數量。

每回合可以給周圍的節點一枚金幣,請問最少需要幾回合才能讓所有節點恰好擁有一枚金幣?


原本的英文題目敘述


測試範例

Example 1:

raw-image
Input: root = [3,0,0]
Output: 2
Explanation: From the root of the tree, we move one coin to its left child, and one coin to its right child.


Example 2:

raw-image


Input: root = [0,3,0]
Output: 3
Explanation: From the left child of the root, we move two coins to the root [taking two moves]. Then, we move one coin from the root of the tree to the right child.

Constraints:

  • The number of nodes in the tree is n.

節點總數目為n。

  • 1 <= n <= 100

節點總數木n 介於1~100之間。

  • 0 <= Node.val <= n

節點擁有的金幣數量介於0~n

  • The sum of all Node.val is n.

整棵樹整共擁有n枚金幣。


演算法 收入支出平衡 + DFS模擬

根據題意,最終目標是每個節點一枚金幣,可以想成是人人有獎,而且剛好都有一枚。

題目又保證整棵樹有n個節點,有n枚金幣,所以一定有解。


可以這樣想:

統計每個節點(每個人)的收入與支出分數值:

= 原本擁有的金幣數量 + 左子樹的收入支出分數 + 右子樹的收入支出分數 - 1

-1 是為了最後保留一枚金幣給自己(當下這個節點)


如果是正值,代表這個節點所代表的子樹還有多餘的金幣可以分給別人

如果是負值,代表這個節點所代表的子樹有不足,需有別的節點分配多餘的金幣過來

數量就代表多幾枚金幣或少幾枚金幣。


回合數就是左子樹的分數絕對值 + 右子樹的分數絕對值

為什麼?

因為每回合可以移動一枚金幣

有多幾枚就需要幾回合去給出去,有少幾枚就需要幾回合拿進來



程式碼 收入支出平衡 + DFS模擬

class Solution:
def distributeCoins(self, root: Optional[TreeNode]) -> int:

def accounting(node):

## Base case: empty node or empty tree has 0 coin
if not node:
return 0

## General cases: check and move based on balance of coins
# Check balance of left subtree
left = accounting( node.left )

# Check balance of right subtree
right = accounting( node.right )

# current move = get extra coins, and dispatch to who need coin
accounting.move += abs(left) + abs(right)

# balance of current node
# -1 term is to reserve one coin for myself
return node.val + left + right - 1

# ----------------------------------
accounting.move = 0
accounting(root)
return accounting.move



複雜度分析

時間複雜度: O(n )

DFS拜訪整棵樹,每個節點至多拜訪一次。


空間複雜度: O(n )

DFS拜訪整棵樹,當整棵樹向左歪斜或向右歪斜時。有最大深度O(n)。


關鍵知識點

根據題意推敲出,關鍵在於統計每個節點的支出收入平衡分數,分數多少,就需要對應的回合數去移動金幣


Reference

[1] Distribute Coins in Binary Tree - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目給定一個布林代數的二元樹,要求我們計算最後的結果。 葉子節點都是真假值 非葉子節點都是布林運算子
本篇文章討論了在給定二元矩陣中,如何使用Dijkstra算法找出從左上角到右下角的最安全路徑的安全分數。包括定義曼哈頓距離、最安全路徑的算法以及時間複雜度和空間複雜度分析。最終推薦Dijkstra algorithm和priority queue的使用。文章提供了參考文獻LeetCode的連結。
這篇文章討論了從二維整數陣列中挖掘金礦的問題。文章使用DFS模擬N4走法來解決問題,並提供了時間複雜度和空間複雜度的分析。這將有助於瞭解如何從地圖中挖取最多金礦。文章中提到了相關的關鍵知識點和參考資料。
題目敘述 輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數。 要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案。 原本的英文題目敘述
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
題目給定一個布林代數的二元樹,要求我們計算最後的結果。 葉子節點都是真假值 非葉子節點都是布林運算子
本篇文章討論了在給定二元矩陣中,如何使用Dijkstra算法找出從左上角到右下角的最安全路徑的安全分數。包括定義曼哈頓距離、最安全路徑的算法以及時間複雜度和空間複雜度分析。最終推薦Dijkstra algorithm和priority queue的使用。文章提供了參考文獻LeetCode的連結。
這篇文章討論了從二維整數陣列中挖掘金礦的問題。文章使用DFS模擬N4走法來解決問題,並提供了時間複雜度和空間複雜度的分析。這將有助於瞭解如何從地圖中挖取最多金礦。文章中提到了相關的關鍵知識點和參考資料。
題目敘述 輸入給定一個鏈結串列,整體看代表一個十進位的數字,各別看每個節點代表每個digit,分別從最高位~最低位個位數。 要求我們把原本的數字乘以二,並且以鏈結串列的形式返回答案。 原本的英文題目敘述
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
Solana 鏈上最大的去中心化交易聚合器 Jupiter 最近推出$WEN的代幣空投  只要使用過Jupiter這個平台的都有 人人有獎不用搶! 一個地址可以領取643,652個$WEN 目前價值大約60~80美元 創始人MEOW 在推特也介紹(?)了代幣 看起來超迷因的
Thumbnail
體育向來是研究人類表現的重要領域,許多關於學習、成就與表現的重要著作都源自於觀察分析運動員的成績。本書的課題是:究竟難以定義又無法衡量,讓成員產生正面、積極感受的「團隊默契」,到底對比賽成績有沒有幫助? 《無形資產》分析球隊、球員的數據中找出研究的標的,實地採訪運動員與相關人員,嘗試告訴你答案。
Thumbnail
我們想讓你知道的是:ChatGPT很有可能會成為一個最有影響力的聚合者,並且取代Google、Facebook等頭部平台,成為新的、認識世界最佳的管道。
Thumbnail
熱愛海洋的你 - 不去海邊的時候也要使用「海洋友善防曬」嗎? 「是的!就算只是通勤上班,也要使用友善海洋的防曬乳!」 大家可能認為只有在海邊玩水的時候才需要使用海洋友善防曬,但其實你擦的防曬會隨著沐浴後的廢水流入海洋,即使會經過污水處理,但有些物質無法完全排除,最終還是會影響珊瑚與海洋生態,每
Thumbnail
如果文明世界是一台電腦,那驅動它的 0 與 1 就是人文與科技。在未來,硬體可能不再是扮演帶動數位經濟成長最吃重的角色,軟體+硬體+服務三合一的商機才是大趨勢。
Thumbnail
革命性的NFT ,就在今天,由我很喜歡的一位專門介紹元宇宙項目的YT博主主講。經營清新,專業,也與比特宇宙多有互動,也是腦哥大力推薦的YT主,真誠不騙,推薦給想入圈的朋友。 小田博一YOUTUBE https://www.youtube.com/watch?v=cKznY1lqZ_A
Thumbnail
「我聽人說做大腸鏡檢查好辛苦,改做無痛大腸鏡還要麻醉,好像也有危險……做高階影像檢查應該就夠了吧!?」因為電腦斷層、核磁共振等影像檢查的解析度很好,所以能取代內視鏡來探查消化道管腔內的狀況嗎? 這可是大錯特錯!許多國內外研究都指出,大腸鏡檢查能大幅降低大腸癌發生率,想要直接檢視腸組織黏膜,看看是
Thumbnail
蝦皮大學 認證講師 全民皆師 火熱招募中 ! ! 蝦皮大學由蝦皮購物官方開辦 2015 年正式成立至今,舉辦破百場電商培訓課,為提升台灣電子商務發展。  [ 蝦皮大學 ]  提供專業系統化培訓 未來認證講師容,跟著蝦皮大學將一同乘載著電商教育的使命,讓賣場起步不侷限,踏遍全台灣 !
Thumbnail
伴隨今年 10月1日「一國兩稅制」的日本消費稅新制上路,日本政府也在同一天正式推出「幼保無償化」。簡單來說,就是將消費稅從 8%調漲到 10%當中多出來的 2%稅收,用來補助家有 3–5歲學齡前幼童的幼托費用,或是家有 0–2歲嬰幼兒的低收入戶(住民税非課税世帯)可以免費將孩子送到幼稚園或保育所。
Thumbnail
「幼保無償化」擴大適用範圍到「認可外保育施設」後,就失去了原先希望藉機淘汰劣質私托機構的目的,只會讓絕大多數家有 3–5歲學齡前兒童的家長感到開心而已。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
Solana 鏈上最大的去中心化交易聚合器 Jupiter 最近推出$WEN的代幣空投  只要使用過Jupiter這個平台的都有 人人有獎不用搶! 一個地址可以領取643,652個$WEN 目前價值大約60~80美元 創始人MEOW 在推特也介紹(?)了代幣 看起來超迷因的
Thumbnail
體育向來是研究人類表現的重要領域,許多關於學習、成就與表現的重要著作都源自於觀察分析運動員的成績。本書的課題是:究竟難以定義又無法衡量,讓成員產生正面、積極感受的「團隊默契」,到底對比賽成績有沒有幫助? 《無形資產》分析球隊、球員的數據中找出研究的標的,實地採訪運動員與相關人員,嘗試告訴你答案。
Thumbnail
我們想讓你知道的是:ChatGPT很有可能會成為一個最有影響力的聚合者,並且取代Google、Facebook等頭部平台,成為新的、認識世界最佳的管道。
Thumbnail
熱愛海洋的你 - 不去海邊的時候也要使用「海洋友善防曬」嗎? 「是的!就算只是通勤上班,也要使用友善海洋的防曬乳!」 大家可能認為只有在海邊玩水的時候才需要使用海洋友善防曬,但其實你擦的防曬會隨著沐浴後的廢水流入海洋,即使會經過污水處理,但有些物質無法完全排除,最終還是會影響珊瑚與海洋生態,每
Thumbnail
如果文明世界是一台電腦,那驅動它的 0 與 1 就是人文與科技。在未來,硬體可能不再是扮演帶動數位經濟成長最吃重的角色,軟體+硬體+服務三合一的商機才是大趨勢。
Thumbnail
革命性的NFT ,就在今天,由我很喜歡的一位專門介紹元宇宙項目的YT博主主講。經營清新,專業,也與比特宇宙多有互動,也是腦哥大力推薦的YT主,真誠不騙,推薦給想入圈的朋友。 小田博一YOUTUBE https://www.youtube.com/watch?v=cKznY1lqZ_A
Thumbnail
「我聽人說做大腸鏡檢查好辛苦,改做無痛大腸鏡還要麻醉,好像也有危險……做高階影像檢查應該就夠了吧!?」因為電腦斷層、核磁共振等影像檢查的解析度很好,所以能取代內視鏡來探查消化道管腔內的狀況嗎? 這可是大錯特錯!許多國內外研究都指出,大腸鏡檢查能大幅降低大腸癌發生率,想要直接檢視腸組織黏膜,看看是
Thumbnail
蝦皮大學 認證講師 全民皆師 火熱招募中 ! ! 蝦皮大學由蝦皮購物官方開辦 2015 年正式成立至今,舉辦破百場電商培訓課,為提升台灣電子商務發展。  [ 蝦皮大學 ]  提供專業系統化培訓 未來認證講師容,跟著蝦皮大學將一同乘載著電商教育的使命,讓賣場起步不侷限,踏遍全台灣 !
Thumbnail
伴隨今年 10月1日「一國兩稅制」的日本消費稅新制上路,日本政府也在同一天正式推出「幼保無償化」。簡單來說,就是將消費稅從 8%調漲到 10%當中多出來的 2%稅收,用來補助家有 3–5歲學齡前幼童的幼托費用,或是家有 0–2歲嬰幼兒的低收入戶(住民税非課税世帯)可以免費將孩子送到幼稚園或保育所。
Thumbnail
「幼保無償化」擴大適用範圍到「認可外保育施設」後,就失去了原先希望藉機淘汰劣質私托機構的目的,只會讓絕大多數家有 3–5歲學齡前兒童的家長感到開心而已。