【算法】【遞歸篇】【樹】第6節:leetcode 101. 對稱二叉樹

本期任務:介紹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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章