28.對稱的二叉樹-待優化

題目描述

請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。

思路1:

前序遍歷順序爲根、左、右。定義一個對稱的前序遍歷算法,順序爲根、右、左。如果兩次遍歷後的序列是相同的,那麼認爲是對稱的,如果是不同的,那麼就是不對稱的。注意特殊情況,如二叉樹的所有節點值相等但是卻有殘缺,爲了正確判斷這種類型的二叉樹,在遍歷時把遇到的空指針也考慮進來。這個代碼寫的,太不雅觀了。

python題解:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def isSymmetrical(self, pRoot):
        # write code here
        if not pRoot:
            return True
        s1=[]
        s2=[]
        self.QianLeftRight(s1,pRoot)
        self.QianRightLeft(s2,pRoot)
        for i in range(len(s1)):
            if s1[i]!=s2[i]:
                return False
        return True
        
    def QianLeftRight(self,s,pRoot):
        if pRoot.left==None and pRoot.right==None:
            return 
        if pRoot.left:
            s.append(pRoot.left.val)
            self.QianLeftRight(s,pRoot.left)
        else:
            s.append('#')
        if pRoot.right:
            s.append(pRoot.right.val)
            self.QianLeftRight(s,pRoot.right)
        else:
            s.append('#')

    def QianRightLeft(self,s,pRoot):
        if pRoot.left==None and pRoot.right==None:
            return
        if pRoot.right:
            s.append(pRoot.right.val)
            self.QianRightLeft(s,pRoot.right)
        else:
            s.append('#')
        if pRoot.left:
            s.append(pRoot.left.val)
            self.QianRightLeft(s,pRoot.left)
        else:
            s.append('#')

 

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