本期任務:介紹leetcode中樹的幾個經典問題的遞歸解法
【算法】【遞歸篇】【樹】第1節:leetcode 100. 相同的樹
【算法】【遞歸篇】【樹】第2節:leetcode 105. 從前序與中序遍歷序列構造二叉樹
【算法】【遞歸篇】【樹】第3節:leetcode 210. 課程表 II
【算法】【遞歸篇】【樹】第4節:leetcode 236. 二叉樹的最近公共祖先
【算法】【遞歸篇】【樹】第5節:leetcode 572. 另一個樹的子樹
【算法】【遞歸篇】【樹】第6節:leetcode 101. 對稱二叉樹
【算法】【遞歸篇】【樹】第7節:leetcode 98. 驗證二叉搜索樹
【算法】【遞歸篇】【樹】第8節:leetcode 102. 二叉樹的層序遍歷
問題來源
101. 對稱二叉樹
給定一個二叉樹,檢查它是否是鏡像對稱的。
例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的:
1
/ \
2 2
\ \
3 3
大佬解析
遞歸結束條件:
- 都爲空指針則返回 true
- 只有一個爲空則返回 false
遞歸過程:
- 判斷兩個指針當前節點值是否相等
- 判斷 A 的右子樹與 B 的左子樹是否對稱
- 判斷 A 的左子樹與 B 的右子樹是否對稱
代碼
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
def isSame(l, r):
if not l and not r:
return True
if not l or not r:
return False
return l.val == r.val and isSame(l.left, r.left) and isSame(l.right, r.right)
return isSame(root, root)