圖論應用:從從屬關係重建二元樹_Leetcode #2196

更新於 2024/07/24閱讀時間約 3 分鐘

題目敘述 Create Binary Tree From Descriptions

給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。
請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。


測試範例


Example 1:

raw-image


Input: descriptions = [[20,15,1],[20,17,0],[50,20,1],[50,80,0],[80,19,1]]
Output: [50,20,80,15,17,19]
Explanation: The root node is the node with value 50 since it has no parent.
The resulting binary tree is shown in the diagram.


Example 2:

raw-image


Input: descriptions = [[1,2,1],[2,3,0],[3,4,1]]
Output: [1,2,null,null,3,4]
Explanation: The root node is the node with value 1 since it has no parent.
The resulting binary tree is shown in the diagram.

約束條件

Constraints:

  • 1 <= descriptions.length <= 10^4

輸入陣列的長度介於1~一萬。

  • descriptions[i].length == 3

每條描述包含三個資訊: 父節點,子節點,左右方向。

  • 1 <= parenti, childi <= 10^5

父節點、子節點節點值介於1~十萬之間。

  • 0 <= isLefti <= 1

isLeft=1代表是左邊的子節點,反之,代表右邊的子節點。

  • The binary tree described by descriptions is valid.

題目保證描述資訊都為真,可以重建一棵合法的二元樹。


演算法 重建二元樹

每個輸入都會提供兩個節點之間的從屬關係,
根據從屬關係建立父節點與子節點的連結。

最後掃描整顆樹,沒有當過子節點的就是整顆二元樹的根結點


程式碼 重建二元樹


class Solution:
def createBinaryTree(self, descriptions):

children = set()
tree = {}

for p,c,is_left in descriptions:
parend_node = tree.setdefault(p, TreeNode(p))
child_node = tree.setdefault(c, TreeNode(c))

if is_left:
parend_node.left = child_node
else:
parend_node.right = child_node
children.add(c)

root = (set(tree) - set(children)).pop()
return tree[root]

複雜度分析

時間複雜度:O(n)

依序掃描每一個從屬關係,所需時間為O(n)。


空間複雜度:O(n)

需要建立字典和集合去儲存整顆樹,所需空間為O(n)


Reference:

[1] Create Binary Tree From Descriptions - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 All Ancestors of a Node in a Directed Acyclic Graph 給定一個有向無環圖,請找出每個點的祖先,以陣列的形式返回答案。
題目敘述 Binary Tree Maximum Path Sum 給定一個二元樹,請找出最大的區間路徑和是多少? 註: 區間路徑和 = 某個節點a -> 某個節點b的路徑節點值總和。
題目敘述 House Robber III 題目會給我們一個二元樹, 二元樹裡的每個節點分別代表每棟房屋的價值,也就是房屋內有的現金數量。 題目敘述給的情境是假想盜賊要偷東西,限制是上下相鄰樓層的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。 請問盜賊可以得手的最大金額是多少?
探討如何使用DP動態規劃的方法來進行單字串接,包含了DP遞迴關係式、狀態定義、優化技巧和程式碼示例。同時分析了時間複雜度、空間複雜度和關鍵知識點。這是LeetCode的一個應用題,類似於Word Break I的延伸。
知道如何從一組給定的英文字母和單字庫中的單字拼出最高分的單字組合。使用DFS + 回溯法 + 剪枝優化的演算法,詳細分析瞭如何展開所有可能的路徑,並且找出符合條件的狀態,協助讀者理解演算法背後的思維和方法。
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 All Ancestors of a Node in a Directed Acyclic Graph 給定一個有向無環圖,請找出每個點的祖先,以陣列的形式返回答案。
題目敘述 Binary Tree Maximum Path Sum 給定一個二元樹,請找出最大的區間路徑和是多少? 註: 區間路徑和 = 某個節點a -> 某個節點b的路徑節點值總和。
題目敘述 House Robber III 題目會給我們一個二元樹, 二元樹裡的每個節點分別代表每棟房屋的價值,也就是房屋內有的現金數量。 題目敘述給的情境是假想盜賊要偷東西,限制是上下相鄰樓層的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。 請問盜賊可以得手的最大金額是多少?
探討如何使用DP動態規劃的方法來進行單字串接,包含了DP遞迴關係式、狀態定義、優化技巧和程式碼示例。同時分析了時間複雜度、空間複雜度和關鍵知識點。這是LeetCode的一個應用題,類似於Word Break I的延伸。
知道如何從一組給定的英文字母和單字庫中的單字拼出最高分的單字組合。使用DFS + 回溯法 + 剪枝優化的演算法,詳細分析瞭如何展開所有可能的路徑,並且找出符合條件的狀態,協助讀者理解演算法背後的思維和方法。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
相信多數人都有這樣的經驗,願意無償的準備一場驚喜;投入時間、投入金錢、投入似乎源源不絕的愛。在準備的過程中不覺得累、甚至還樂在其中,那是種很踏實的感覺,因為我們很確定我們應該、想要這麼做。為什麼為心愛的人準備這一切的「過程」會如此甜美呢?由愛做為行動的動力(機)來源與其他行動本質上有什麼差異
Thumbnail
本篇文章深入介紹了圖形的基本概念、組成和應用。從圖形的基本組成,到圖的類型與種類,再到圖形演算法的三大類型,本文將接續圖形領域的深入學習,並分享了對圖形的初步認識和學習方向的小心得。希望對正在學習圖形的人有所幫助。
Thumbnail
圖形演算法在資料處理上扮演重要角色。本文介紹圖形的歷史、定義、技術用途,以及為什麼我們要關心圖形演算法。文末還提及圖形演算法在機器學習領域的應用。下次將介紹更詳細的圖形演算法內容。
Thumbnail
冷冷的天氣中,能到草地上跑跑跳跳 、曬曬太陽是多麼幸福美好的事! 在一次這樣的集會中, 老師詢問孩子們我們要在即將到來的春節做什麼跟大家一起共度呢? 孩子們覺得可以唱唱跳跳~ 老師便提議一首可愛又有特色的歌曲, 孩子們一起坐在草地上玩草、玩樹枝、聽歌、學唱,好快樂唷!
Thumbnail
  回想起剛從機械系畢業時,我懂得怎麼計算,也熟悉各種機械理論。但真正要自己設計時,卻只能朦朧應用,可以說是亂兜各種機件,最後拼出了一個四不像的奇怪機構。   而十年後的現在,對機構學的熱情讓我始終從事「能應用『動力機構』」的工作。看過許多機械構造也自己鑽研許多,才能達到現在類「得心應手」的地步。
Thumbnail
圖到底誰畫的?(文/作者黃文博) 正在讀《品牌大學問》的朋友,好幾位私下詢問:「每一章最後的流程圖非常驚艷!你找誰畫的?」
Thumbnail
前文參考: 兩張圖回顧一週大盤與個股結構,再談一般人目前最安穩的獲利模式。 2月17日 然後,大家會發現,前文提到的比較現象,在最近幾日更為明確:
Thumbnail
-> 這篇在說什麼 這篇文章提供一個科目圖的視角來分析科系,每個學生可以依照自己喜歡的工作,來反推出需要學習的科目,進而反推出選這科系的成本效益值 此篇也會leverage這科目圖工具去解除一些大家的誤解/盲點 出路廣的科系就是好科系? 是否有盲點? 出路廣的科系還有分類? 前言 如何判斷?
Thumbnail
圖像傳遞資訊最大的好處是什麼?反應快。 1961年10月13日,東柏林設立小綠人交通號誌,這是由東德的心理學家卡爾.佩格勞(Karl Peglau)所設計。為了降低車禍意外,他創造頭戴帽子的可愛行人號誌... -追蹤、訂閱《郝廣才日日談》來閱讀全文,每天為你說一個故事。
哈耶克這種人之所以能在漢語圈傳播得很遠,有一點就是因為他的行為模式很像是胡適那種士大夫,這種人就非常精確地體現了胡適所謂的那種「對政治不感興趣的興趣」。所謂「不感興趣的興趣」,從最難聽的方向進行惡意解釋,恰好就是鮑德溫用來罵羅瑟米爾爵士的那句話:他們追求不負責任的權力,正如歷代的婊子追求牌坊。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
相信多數人都有這樣的經驗,願意無償的準備一場驚喜;投入時間、投入金錢、投入似乎源源不絕的愛。在準備的過程中不覺得累、甚至還樂在其中,那是種很踏實的感覺,因為我們很確定我們應該、想要這麼做。為什麼為心愛的人準備這一切的「過程」會如此甜美呢?由愛做為行動的動力(機)來源與其他行動本質上有什麼差異
Thumbnail
本篇文章深入介紹了圖形的基本概念、組成和應用。從圖形的基本組成,到圖的類型與種類,再到圖形演算法的三大類型,本文將接續圖形領域的深入學習,並分享了對圖形的初步認識和學習方向的小心得。希望對正在學習圖形的人有所幫助。
Thumbnail
圖形演算法在資料處理上扮演重要角色。本文介紹圖形的歷史、定義、技術用途,以及為什麼我們要關心圖形演算法。文末還提及圖形演算法在機器學習領域的應用。下次將介紹更詳細的圖形演算法內容。
Thumbnail
冷冷的天氣中,能到草地上跑跑跳跳 、曬曬太陽是多麼幸福美好的事! 在一次這樣的集會中, 老師詢問孩子們我們要在即將到來的春節做什麼跟大家一起共度呢? 孩子們覺得可以唱唱跳跳~ 老師便提議一首可愛又有特色的歌曲, 孩子們一起坐在草地上玩草、玩樹枝、聽歌、學唱,好快樂唷!
Thumbnail
  回想起剛從機械系畢業時,我懂得怎麼計算,也熟悉各種機械理論。但真正要自己設計時,卻只能朦朧應用,可以說是亂兜各種機件,最後拼出了一個四不像的奇怪機構。   而十年後的現在,對機構學的熱情讓我始終從事「能應用『動力機構』」的工作。看過許多機械構造也自己鑽研許多,才能達到現在類「得心應手」的地步。
Thumbnail
圖到底誰畫的?(文/作者黃文博) 正在讀《品牌大學問》的朋友,好幾位私下詢問:「每一章最後的流程圖非常驚艷!你找誰畫的?」
Thumbnail
前文參考: 兩張圖回顧一週大盤與個股結構,再談一般人目前最安穩的獲利模式。 2月17日 然後,大家會發現,前文提到的比較現象,在最近幾日更為明確:
Thumbnail
-> 這篇在說什麼 這篇文章提供一個科目圖的視角來分析科系,每個學生可以依照自己喜歡的工作,來反推出需要學習的科目,進而反推出選這科系的成本效益值 此篇也會leverage這科目圖工具去解除一些大家的誤解/盲點 出路廣的科系就是好科系? 是否有盲點? 出路廣的科系還有分類? 前言 如何判斷?
Thumbnail
圖像傳遞資訊最大的好處是什麼?反應快。 1961年10月13日,東柏林設立小綠人交通號誌,這是由東德的心理學家卡爾.佩格勞(Karl Peglau)所設計。為了降低車禍意外,他創造頭戴帽子的可愛行人號誌... -追蹤、訂閱《郝廣才日日談》來閱讀全文,每天為你說一個故事。
哈耶克這種人之所以能在漢語圈傳播得很遠,有一點就是因為他的行為模式很像是胡適那種士大夫,這種人就非常精確地體現了胡適所謂的那種「對政治不感興趣的興趣」。所謂「不感興趣的興趣」,從最難聽的方向進行惡意解釋,恰好就是鮑德溫用來罵羅瑟米爾爵士的那句話:他們追求不負責任的權力,正如歷代的婊子追求牌坊。