题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路
一起遍历一样的两个二叉树
- 如果两棵树都没有节点了,返回True
- 如果一个有,一个没有,返回False
- 如果树1左的值和树2右的值不相等,或者树1右的值和树2左的值不相等,返回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 not pRoot:
return True
return self.symmetry(pRoot,pRoot)
def symmetry(self,p1,p2):
if not p1 and not p2:
return True
if not p1 or not p2:
return False
if p1.val!=p2.val:
return False
return self.symmetry(p1.left,p2.right) and self.symmetry(p1.right,p2.left)
测试用例
if __name__=='__main__':
s=Solution()
#构建二叉树
root=TreeNode(1)
node1=TreeNode(2)
node2=TreeNode(2)
node3=TreeNode(3)
node4=TreeNode(4)
node5=TreeNode(4)
node6=TreeNode(3)
root.left=node1
root.right=node2
node1.left=node3
node1.right=node4
node2.left=node5
node2.right=node6
node3.left=node3.right=node4.left=node4.right=node5.left=node5.right=node6.left=node6.right=None
#调用函数
print(s.isSymmetrical(root))