题目描述:
给定一个二叉树,检查它是否镜像对称的。
例如二叉树[1,2,2,3,4,4,3]是对称的。
1 / \ 2 2 / \ / \ 3 4 4 3
但是下面这个[1,2,2,null,3,null,3]则是不镜像对称的:
1 / \ 2 2 \ \ 3 3
分析:
递归调用check函数,如果两个节点都是空,则返回true,如果有一个为空,另一个非空,或者两个都是非空但是值不相等,则返回false,如果两边值相等则继续判断递归判断,如果有一个为false则为false。
代码:
def check(left,right):#检查两个端点
if(left==None and right==None):#两边都是空则为true
return True
elif(left==None and right!=None or left!=None and right==None):#两边有一边为空,另一边非空,则为false
return False
else:#两边都非空
if(left.val!=right.val):#两边值不相等,则为false
return False
else:#两边值相等
if(check(left.left,right.right)==True and check(left.right,right.left)==True):
return True
else:
return False
class Solution:
def isSymmetric(self,root):#判断二叉树是否对称,对称返回True反之,返回False
if(root==None):
return True
return check(root.left,root.right)