vocus logo

方格子 vocus

基礎圖論題目 Same Tree_Leetcode #100

更新 發佈閱讀 2 分鐘
raw-image

題目敘述: 100. Same Tree


題目會給定兩棵Binary Tree的根結點,要求我們判斷兩棵樹是否一模一樣

也就是說,形狀相同節點的數值也相同。


測試範例:

Example 1:

raw-image
Input: p = [1,2,3], q = [1,2,3]
Output: true

Example 2:

raw-image
Input: p = [1,2], q = [1,null,2]
Output: false

Example 3:

raw-image
Input: p = [1,2,1], q = [1,1,2]
Output: false

演算法:

圖論中常見的DFS深度優先探索,或BFS廣度優先探索都可以拿來解這一題。

直覺度簡潔度來說,DFS更直覺也更乾淨俐落。


先複習一下DFS的通用模板:

def dfs( parameter ):
 
 # 終止條件
 if stop conidtion:
  return result
 
 # 通則 general cases
 dfs( paramater updated )
 return result

通則:

若p和q同時存在,則檢查p 和 q 的節點數值是否相等,並且用同樣的邏輯,遞迴檢查p, q的左子樹,和p, q的右子樹是否相等。

終止條件:

若p和q不是同時存在,則檢查是否 p == q 而且都等於 NULL。

若兩者皆為空Null,則返回True。

若否,則返回False。


程式碼:

class Solution:
  def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:

  # stop condition
  if not( p and q ):
    return p == q

  # general case:
  return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)



複雜度分析

時間複雜度:

O(n) 每個節點至多拜訪一次,最多就是拜訪整棵樹。

空間複雜度:

O(n) 成本耗費在call stack,當輸入的兩棵樹都向左歪斜,或向右歪斜時,深度最深,最多為O(n)。


Reference:

[1] Python/JS/Go/C++ O(n) sol by DFS [w/ Visualization ] — Same Tree — LeetCode

留言
avatar-img
小松鼠的演算法樂園
99會員
428內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/09/26
Leetcode 729. My Calendar I 給定一個行事曆的class定義和行程安排的介面interface。 請完成下列function 1.建構子MyCalendar() 初始化MyCalendar物件 2.boolean book(int start, int end) 插入新行程
Thumbnail
2024/09/26
Leetcode 729. My Calendar I 給定一個行事曆的class定義和行程安排的介面interface。 請完成下列function 1.建構子MyCalendar() 初始化MyCalendar物件 2.boolean book(int start, int end) 插入新行程
Thumbnail
2024/09/10
Insert Greatest Common Divisors in Linked List 題目給定一個鏈結串列, 請在兩兩節點之間加入一個新節點,新節點的值為兩者之間的最大公因數。 最後返回新串列的head node作為答案。
Thumbnail
2024/09/10
Insert Greatest Common Divisors in Linked List 題目給定一個鏈結串列, 請在兩兩節點之間加入一個新節點,新節點的值為兩者之間的最大公因數。 最後返回新串列的head node作為答案。
Thumbnail
2024/09/09
2326. Spiral Matrix IV 題目給定一個Linked list和對應的矩陣高度m、寬度n。 請依照順時針的拜訪順序, 從左上角出發,依照次序把Linked List的內容填到矩陣裡。 如果有剩餘不足的空位,就填補-1。 最後將填補好的矩陣返回作為答案。
Thumbnail
2024/09/09
2326. Spiral Matrix IV 題目給定一個Linked list和對應的矩陣高度m、寬度n。 請依照順時針的拜訪順序, 從左上角出發,依照次序把Linked List的內容填到矩陣裡。 如果有剩餘不足的空位,就填補-1。 最後將填補好的矩陣返回作為答案。
Thumbnail
看更多
你可能也想看
Thumbnail
PING! 交友軟體體驗心得分享,內文詳述app操作介面,以及軟體特色與功能,並提供app下載連結,推薦給有交友需求的朋友更多選擇。
Thumbnail
PING! 交友軟體體驗心得分享,內文詳述app操作介面,以及軟體特色與功能,並提供app下載連結,推薦給有交友需求的朋友更多選擇。
Thumbnail
身為自由工作者,我分享使用 Ping! 交友軟體的實際體驗,從真人認證、生活標籤到聊天節奏,談談我如何在不增加壓力的情況下,透過交友軟體認識價值觀合拍的人,建立高品質的交友關係。
Thumbnail
身為自由工作者,我分享使用 Ping! 交友軟體的實際體驗,從真人認證、生活標籤到聊天節奏,談談我如何在不增加壓力的情況下,透過交友軟體認識價值觀合拍的人,建立高品質的交友關係。
Thumbnail
你也和我一樣,生活圈固定、想認識新朋友又害怕遇到怪人嗎?身為研生與大I人,這篇文章分享了我實際使用 Ping! 交友軟體的經驗。Ping! 主打真人認證、慢速交友與高品質聊天體驗,讓交友回到安心、不焦慮的狀態。
Thumbnail
你也和我一樣,生活圈固定、想認識新朋友又害怕遇到怪人嗎?身為研生與大I人,這篇文章分享了我實際使用 Ping! 交友軟體的經驗。Ping! 主打真人認證、慢速交友與高品質聊天體驗,讓交友回到安心、不焦慮的狀態。
Thumbnail
交友軟體Ping!透過嚴格的真人認證機制,替使用者把關「照騙」與假帳號的風險,Ping!也強調照片與個性並重,透過個人頁面設計,讓用戶在瀏覽照片的同時,也能深入瞭解對方的興趣、價值觀,不僅是一個交友軟體,更是引導使用者找到真實自我、開啟高品質情感關係的催化劑。
Thumbnail
交友軟體Ping!透過嚴格的真人認證機制,替使用者把關「照騙」與假帳號的風險,Ping!也強調照片與個性並重,透過個人頁面設計,讓用戶在瀏覽照片的同時,也能深入瞭解對方的興趣、價值觀,不僅是一個交友軟體,更是引導使用者找到真實自我、開啟高品質情感關係的催化劑。
Thumbnail
題目敘述 題目會給定兩顆二元樹的根結點,要求我們判斷這兩顆二元樹是否為 葉子相似樹? 葉子相似樹的定義 兩顆二元樹,從左到右看的葉子結點的序列完全相同。 例如下圖中的這兩顆二元樹,從左到右看的葉子結點的序列 = [6, 7, 4, 9, 8] 完全相同。 題目的原文敘述 測試範例
Thumbnail
題目敘述 題目會給定兩顆二元樹的根結點,要求我們判斷這兩顆二元樹是否為 葉子相似樹? 葉子相似樹的定義 兩顆二元樹,從左到右看的葉子結點的序列完全相同。 例如下圖中的這兩顆二元樹,從左到右看的葉子結點的序列 = [6, 7, 4, 9, 8] 完全相同。 題目的原文敘述 測試範例
Thumbnail
題目 : 100. Same Tree
Thumbnail
題目 : 100. Same Tree
Thumbnail
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
Thumbnail
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
Thumbnail
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
Thumbnail
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
Thumbnail
題目會給定給我們一顆二元樹的根結點, 要求我們輸出上下顛倒的Level-order traversal的拜訪結果。
Thumbnail
題目會給我們一顆二元樹的根節點, 要求我們對齊根節點正中央的虛擬分割線,反轉整顆二元樹。
Thumbnail
題目會給我們一顆二元樹的根節點, 要求我們對齊根節點正中央的虛擬分割線,反轉整顆二元樹。
Thumbnail
題目會給定一顆二元樹的根結點,要求我們驗證這一顆樹是否為合法的二元搜索樹, 也就是所謂的Binary search tree, aka BST?
Thumbnail
題目會給定一顆二元樹的根結點,要求我們驗證這一顆樹是否為合法的二元搜索樹, 也就是所謂的Binary search tree, aka BST?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News