题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
递归版本:判断左右孩子是否相等,相等后返回true。注意只有左右都是None的时候才相等,两个结点的值一样并不是结点一样,因为指向的地址不一样。如果左右结点的值一样的话,递归比较左右孩子镜像相等。不满足的话返回false。
# -*- 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 pRoot==None:
return True
return self.find(pRoot.left,pRoot.right)
def find(self,left,right):
if left==right:
return True
if left!=None and right!=None and left.val==right.val:
return self.find(left.left,right.right) and self.find(left.right,right.left)
else:
return False
比较简单的问题再上一个非递归版本,用队列来实现
# -*- 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
p=pRoot
if p==None:
return True
q=[]
q.append(p.left)
q.append(p.right)
while q!=[]:
left=q.pop(0)
right=q.pop(0)
if left==right:
continue
if left==None or right==None:
return False
if left.val!=right.val:
return False
q.append(left.left)
q.append(right.right)
q.append(left.right)
q.append(right.left)
return True