题目
Easy!
题目描述:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
解题思路:
判断二叉树是否是平衡树,比如有两个节点n1, n2,我们需要比较n1的左子节点的值和n2的右子节点的值是否相等,同时还要比较n1的右子节点的值和n2的左子结点的值是否相等,以此类推比较完所有的左右两个节点。我们可以用递归和迭代两种方法来实现,写法不同,但是算法核心都一样。
python代码一
这是自己写的,有点冗余
class Solution:
def __init__(self):
self.flag = True
def adjust(self,left,right):
if((left==None and right!=None)or(left!=None and right==None)):
self.flag = False
return
if(left == None and right==None):
return
if(left.val!=right.val):
self.flag = False
return
self.adjust(left.left,right.right)
self.adjust(left.right, right.left)
def isSymmetric(self, root: TreeNode) -> bool:
if(root ==None):
return True
self.adjust(root.left,root.right)
return self.flag
python代码2
这是参考别人代码写出来的,比较简洁
class Solution:
def adjust(self,left,right):
if(left==None and right ==None):
return True
if(left==None or right ==None):
return False
return (left.val==right.val) and self.adjust(left.left,right.right) and self.adjust(left.right,right.left)
def isSymmetric(self, root: TreeNode) -> bool:
if(root ==None):
return True
return self.adjust(root.left,root.right)