题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路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('#')