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

閱讀時間約 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

52會員
339內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
只剩一天領取 $WEN空投 !!人人有獎!!Solana 鏈上最大的去中心化交易聚合器 Jupiter 最近推出$WEN的代幣空投  只要使用過Jupiter這個平台的都有 人人有獎不用搶! 一個地址可以領取643,652個$WEN 目前價值大約60~80美元 創始人MEOW 在推特也介紹(?)了代幣 看起來超迷因的
Thumbnail
avatar
鏈愛ING
2024-01-27
10年研究告訴你打造長勝團隊的秘方:將人人變成神隊友的團隊默契科學--《無形資產》體育向來是研究人類表現的重要領域,許多關於學習、成就與表現的重要著作都源自於觀察分析運動員的成績。本書的課題是:究竟難以定義又無法衡量,讓成員產生正面、積極感受的「團隊默契」,到底對比賽成績有沒有幫助? 《無形資產》分析球隊、球員的數據中找出研究的標的,實地採訪運動員與相關人員,嘗試告訴你答案。
Thumbnail
avatar
我是老查
2023-07-05
輕鬆擁有全世界的注意力!ChatGPT將創造一個人人都接近最佳解答的世界我們想讓你知道的是:ChatGPT很有可能會成為一個最有影響力的聚合者,並且取代Google、Facebook等頭部平台,成為新的、認識世界最佳的管道。
Thumbnail
avatar
怡佳|Elise
2023-04-11
守護珊瑚人人有責!2個簡單步驟挑選真正的海洋友善防曬 熱愛海洋的你 - 不去海邊的時候也要使用「海洋友善防曬」嗎? 「是的!就算只是通勤上班,也要使用友善海洋的防曬乳!」 大家可能認為只有在海邊玩水的時候才需要使用海洋友善防曬,但其實你擦的防曬會隨著沐浴後的廢水流入海洋,即使會經過污水處理,但有些物質無法完全排除,最終還是會影響珊瑚與海洋生態,每
Thumbnail
avatar
有機會。
2022-09-27
《看懂科技賽局》科技背後的人文,其實沒有你想像的那麼簡單|經典書怪讀的@怪獸如果文明世界是一台電腦,那驅動它的 0 與 1 就是人文與科技。在未來,硬體可能不再是扮演帶動數位經濟成長最吃重的角色,軟體+硬體+服務三合一的商機才是大趨勢。
Thumbnail
avatar
王政皓|怪獸科技公司
2022-08-18
《看影片人人有獎!?》LuckyTiger NFT ,每天都有至少1SOL的紅包抽獎,100%版稅回饋(第22篇)革命性的NFT ,就在今天,由我很喜歡的一位專門介紹元宇宙項目的YT博主主講。經營清新,專業,也與比特宇宙多有互動,也是腦哥大力推薦的YT主,真誠不騙,推薦給想入圈的朋友。 小田博一YOUTUBE https://www.youtube.com/watch?v=cKznY1lqZ_A
Thumbnail
avatar
kevin111
2022-03-21
麻醉檢查有沒有風險?人人都能做嗎?3分鐘帶你全面認識無痛大腸鏡 「我聽人說做大腸鏡檢查好辛苦,改做無痛大腸鏡還要麻醉,好像也有危險……做高階影像檢查應該就夠了吧!?」因為電腦斷層、核磁共振等影像檢查的解析度很好,所以能取代內視鏡來探查消化道管腔內的狀況嗎? 這可是大錯特錯!許多國內外研究都指出,大腸鏡檢查能大幅降低大腸癌發生率,想要直接檢視腸組織黏膜,看看是
Thumbnail
avatar
Kuan-Chieh Fang
2021-06-23
[蝦皮大學官方]認證講師招募中,人人都能0到1開啟電商事業;人人皆有機會成為電商名師蝦皮大學 認證講師 全民皆師 火熱招募中 ! ! 蝦皮大學由蝦皮購物官方開辦 2015 年正式成立至今,舉辦破百場電商培訓課,為提升台灣電子商務發展。  [ 蝦皮大學 ]  提供專業系統化培訓 未來認證講師容,跟著蝦皮大學將一同乘載著電商教育的使命,讓賣場起步不侷限,踏遍全台灣 !
Thumbnail
avatar
Shopee Uni
2020-08-25
日本3–5歲幼托免費新制上路(上)|「幼保無償化」真的人人有獎嗎?伴隨今年 10月1日「一國兩稅制」的日本消費稅新制上路,日本政府也在同一天正式推出「幼保無償化」。簡單來說,就是將消費稅從 8%調漲到 10%當中多出來的 2%稅收,用來補助家有 3–5歲學齡前幼童的幼托費用,或是家有 0–2歲嬰幼兒的低收入戶(住民税非課税世帯)可以免費將孩子送到幼稚園或保育所。
Thumbnail
avatar
張郁婕(CHANG, Yu-Chieh)
2019-10-06
日本3–5歲幼托免費新制上路(下)|人人有獎的「幼保無償化」解決不了問題「幼保無償化」擴大適用範圍到「認可外保育施設」後,就失去了原先希望藉機淘汰劣質私托機構的目的,只會讓絕大多數家有 3–5歲學齡前兒童的家長感到開心而已。
Thumbnail
avatar
張郁婕(CHANG, Yu-Chieh)
2019-10-06