【LeetCode】101. Symmetric Tree 解題報告(Python)

題目分析:

給定一個二叉樹,檢查它是否是鏡像對稱的。
例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。
在這裏插入圖片描述
但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的:
在這裏插入圖片描述
解題思路:

這一題的本質還是遍歷,對於樹的遍歷可使用遞歸或者棧。

提交代碼1:(遞歸,Runtime: 40 ms, faster than 99.14% )

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        def dfs(rootl: TreeNode, rootr: TreeNode):
            if not rootl and not rootr:
                return True
            if rootl and not rootr or not rootl and rootr or rootl.val != rootr.val:
                return False
            return dfs(rootl.right, rootr.left) and dfs(rootl.left, rootr.right)
        if root == None: return True
        return dfs(root.left, root.right)

提交代碼2:(棧,Runtime: 40 ms, faster than 99.14% )

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        if root == None: return True
        stack1 = []
        stack2 = []
        stack1.append(root.left)
        stack2.append(root.right)
        while stack1 and stack2:
            root1 = stack1.pop()
            root2 = stack2.pop()
            if (root1 and not root2) or (not root1 and root2): return False
            if root1:
                if root1.val != root2.val: return False
                stack1.append(root1.left)
                stack1.append(root1.right)
                stack2.append(root2.right)
                stack2.append(root2.left)
        return True

參考博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章