題目描述
請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。
思路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('#')