解題說明
Same Tree
題目描述:判斷兩棵二元樹是否完全相同(結構和節點值均相同)。
解題思路:遞迴比較:若兩者都為空,回傳 true;若只有一個為空,回傳 false;若當前節點值不同,回傳 false;否則遞迴比較左子樹和右子樹。
C++ 解法
複雜度分析
時間複雜度:O(min(m, n)),m、n 為兩樹節點數 — 提早返回時更快。
空間複雜度:O(min(h1, h2)) — 遞迴棧深度。
虛擬碼
1. If both null: return true 2. If one null or values differ: return false 3. Return isSameTree(p.left, q.left) AND isSameTree(p.right, q.right)
其他解法
迭代同步遍歷 O(min(m,n)) 時間,O(h) 空間:用隊列同步遍歷兩棵樹 — 邏輯相同但更複雜。
序列化比較 O(m+n) 時間,O(m+n) 空間:序列化兩棵樹,比較字符串 — 時間和空間複雜度都更差。
延伸思考
- 如何找最大相同子樹?
- 如何計算同構的樹對數?
- 如何判斷子樹相同(對稱/旋轉)?