DFS應用: 在二元樹插入新的一層 Add one row to Tree_Leetcode #623

閱讀時間約 4 分鐘

題目敘述

題目會給定一顆二元樹的根結點,
要求我們在指定的層樹d,插入新的一層,節點值為v。

原本的左、右子樹,就成為新的那一層的左子樹、右子樹。

題目的原文敘述


測試範例

Example 1:

raw-image
Input: root = [4,2,6,3,1,5], val = 1, depth = 2
Output: [4,1,1,2,null,null,6,3,1,5]

Example 2:

raw-image
Input: root = [4,2,null,3,1], val = 1, depth = 3
Output: [4,2,null,1,1,3,null,null,1]

約束條件

Constraints:

  • The number of nodes in the tree is in the range [1, 10^4].

節點總數目介於1 ~ 一萬之間。

  • The depth of the tree is in the range [1, 10^4].

深度介於1 ~ 一萬之間。

  • -100 <= Node.val <= 100

節點值介於-100 ~ 100 之間。

  • -10^5 <= val <= 10^5

新插入的節點值介於 負十萬~正十萬之間。

  • 1 <= depth <= the depth of tree + 1

新插入的那一層介於1 ~ 原本的層樹+1


演算法 DFS + 共通模式


題目已經開門見山,要求在指定的層樹d,插入新的一層,節點值為v。


示意圖

raw-image


共通模式:

有一個很直覺的想法,先找到第d層,接著插入指定的新節點v,串接下一層d+1。

接著下方的節點都往後退一層即可。


也就是說,相當於

當d=n時,相當於往下走一層,接著在d-1層插入新節點v。


初始條件:

當d=1時,新插入的位置會取代原本的樹根,原本舊的樹根當作我的左子樹去串接。

當d=2時,剛好是樹根的下方左、右子樹分別插入新節點。原本舊的節點通通往後退一層。


程式碼 DFS + 共通模式


class Solution:
def addOneRow(self, root: TreeNode, v: int, d: int) -> TreeNode:

if not root:

# base case: empty tree
return None

elif d == 1:

# base case: add one row above original root
return TreeNode(v, left=root, right=None)

elif d == 2:

# base case: add one row just below original root
root.left = TreeNode(v, left=root.left, right=None)
root.right = TreeNode(v, left=None, right=root.right)

return root

else:

# general case: depth >= 3
# do it in DFS with common pattern
root.left = self.addOneRow(root.left, v, d-1)
root.right = self.addOneRow(root.right, v, d-1)

return root

複雜度分析 DFS + 共通模式

時間複雜度:

從上到下掃描到第d層,最深頂多到第n層,每個節點最多拜訪一次,所需時間為O(n)


空間複雜度:

從上到下掃描到第d層,最深頂多到第n層,每個節點最多拜訪一次,所需空間為O(n)


關鍵知識點 找出共通模式

根據題意,找出插入節點的共通模式。

發現可以用遞回結構描述:

在第d層插入新節點v,等價於 先往下走一層,接著在第(d-1)層插入新節點v


Reference:

[1] Add One Row to Tree - LeetCode

avatar-img
89會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這篇文章,會帶著大家複習以前學過的DFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 DFS 深度優先搜索框架 def dfs( parameter ): # 邊界條件 if base case or stop cond
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
這篇文章,會帶著大家複習以前學過的DFS框架 結合樹型DP, 並且以路徑和Path Sum的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 DFS 深度優先搜索框架 def dfs( parameter ): if base case or sto
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
這篇文章,會帶著大家複習以前學過的二元搜尋樹(Binary Search Tree)框架, 並且以二分搜尋樹的概念與定義為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 二元搜尋樹(Binary Search Tree)的定義
這篇文章,會帶著大家複習以前學過的DFS + 回溯法框架,並且以回溯法為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個食用的演算法框架。 DFS + 回溯法框架 用途: 展開所有可能的路徑(或者說狀態),並且把符合條件的狀態加入到最終的結果。 def backtrack
這篇文章,會帶著大家複習以前學過的DFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 DFS 深度優先搜索框架 def dfs( parameter ): # 邊界條件 if base case or stop cond
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
這篇文章,會帶著大家複習以前學過的DFS框架 結合樹型DP, 並且以路徑和Path Sum的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 DFS 深度優先搜索框架 def dfs( parameter ): if base case or sto
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
這篇文章,會帶著大家複習以前學過的二元搜尋樹(Binary Search Tree)框架, 並且以二分搜尋樹的概念與定義為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 二元搜尋樹(Binary Search Tree)的定義
這篇文章,會帶著大家複習以前學過的DFS + 回溯法框架,並且以回溯法為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個食用的演算法框架。 DFS + 回溯法框架 用途: 展開所有可能的路徑(或者說狀態),並且把符合條件的狀態加入到最終的結果。 def backtrack
你可能也想看
Google News 追蹤
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
Chiplets 市场正在经历大幅增长,预计到 2033 年其价值将大幅增长至 1070 亿美元,未来十年复合年增长率 (CAGR) 将达到 42.5%。 这一激增是由多种因素推动的,从技术进步到人工智能、数据中心、汽车和消费电子等各个行业对高性能计算不断增长的需求。 小芯片的特点是集成到更大芯片或
Thumbnail
Pepperstone 和 FP Markets 在受 ASIC 监管的经纪商方面可能具有可比性,但他们的移动交易应用程序又如何呢?
Thumbnail
Tickmill 和 IC Markets 是为其用户提供移动应用程序的顶级经纪商,哪一个更好?在这篇文章中寻找答案。
這次的話題,在有部分的自閉症者,因為照顧者的「給予」,變成不好教自閉症者如何拖地。 因為,重要的是,在照顧者的「傳遞」。 用自閉症者的興趣,做培養動機的媒介 對自閉症者而言,培養動機,需要有興趣和喜好的事物做媒介。 因此,自閉症者的理解速度,比較容易快又泛化。 提升模仿能力,做進一步的建立
Thumbnail
Hi,我是茶桁。 在过去的两讲中,我们已经使用 OpenAI 提供的 Embedding 接口完成了文本分类的功能。现在,我们回到 Completion 接口,这一讲将带你更深入地了解该接口的使用。除此之外,我们还将快速搭建一个有界面的聊天机器人,这将让你更好地理解 Completion 接口的应
剛才上網深入找資料,才知道懲罰的特性,是減少行為。 像是有自閉症者容易搶走他人的物品情況,就有必要改善。 具體說明 見到自閉症者的正懲罰,是以負面性質為主。 在自閉症者搶走他人物品,務必提出負面性質的刺激。 像是,在自閉症者有感官敏銳,就可以藉由〝正懲罰〞進行機會感官減敏。 簡單說,不但可以減少搶他
Thumbnail
** 3C機構設計爸版權所有 ** 最後,3C機構設計爸要鼓勵所有機構設計的從業人員,讓自己的技術磚塊堆疊的越縝密,對自己未來的出路就越廣。 學習、您不要再遲疑了,主管都不懂了,你還等待公司主管來教你只會浪費時間,不如讓3C機構設計爸幫你超前部署,比別人擁有更多的能力。
Thumbnail
原文連結:https://zb.house/nft-投资宝典:什么样的游戏应用值得参与和投资?/ 【本文章轉載自鑄幣局 - 提供專業的加密貨幣行業的研究成果的分析平台。】 "由于Cryptoblade是币安链上的Dapp,加上其庞大的交易量,Skill代币上架币安交易所是有很大可能的。" 角色
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
Chiplets 市场正在经历大幅增长,预计到 2033 年其价值将大幅增长至 1070 亿美元,未来十年复合年增长率 (CAGR) 将达到 42.5%。 这一激增是由多种因素推动的,从技术进步到人工智能、数据中心、汽车和消费电子等各个行业对高性能计算不断增长的需求。 小芯片的特点是集成到更大芯片或
Thumbnail
Pepperstone 和 FP Markets 在受 ASIC 监管的经纪商方面可能具有可比性,但他们的移动交易应用程序又如何呢?
Thumbnail
Tickmill 和 IC Markets 是为其用户提供移动应用程序的顶级经纪商,哪一个更好?在这篇文章中寻找答案。
這次的話題,在有部分的自閉症者,因為照顧者的「給予」,變成不好教自閉症者如何拖地。 因為,重要的是,在照顧者的「傳遞」。 用自閉症者的興趣,做培養動機的媒介 對自閉症者而言,培養動機,需要有興趣和喜好的事物做媒介。 因此,自閉症者的理解速度,比較容易快又泛化。 提升模仿能力,做進一步的建立
Thumbnail
Hi,我是茶桁。 在过去的两讲中,我们已经使用 OpenAI 提供的 Embedding 接口完成了文本分类的功能。现在,我们回到 Completion 接口,这一讲将带你更深入地了解该接口的使用。除此之外,我们还将快速搭建一个有界面的聊天机器人,这将让你更好地理解 Completion 接口的应
剛才上網深入找資料,才知道懲罰的特性,是減少行為。 像是有自閉症者容易搶走他人的物品情況,就有必要改善。 具體說明 見到自閉症者的正懲罰,是以負面性質為主。 在自閉症者搶走他人物品,務必提出負面性質的刺激。 像是,在自閉症者有感官敏銳,就可以藉由〝正懲罰〞進行機會感官減敏。 簡單說,不但可以減少搶他
Thumbnail
** 3C機構設計爸版權所有 ** 最後,3C機構設計爸要鼓勵所有機構設計的從業人員,讓自己的技術磚塊堆疊的越縝密,對自己未來的出路就越廣。 學習、您不要再遲疑了,主管都不懂了,你還等待公司主管來教你只會浪費時間,不如讓3C機構設計爸幫你超前部署,比別人擁有更多的能力。
Thumbnail
原文連結:https://zb.house/nft-投资宝典:什么样的游戏应用值得参与和投资?/ 【本文章轉載自鑄幣局 - 提供專業的加密貨幣行業的研究成果的分析平台。】 "由于Cryptoblade是币安链上的Dapp,加上其庞大的交易量,Skill代币上架币安交易所是有很大可能的。" 角色