题目:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
思路:
定义一种对称的遍历算法,即先遍历根节点,再遍历右子节点,最后遍历左子节点。按照先序和对称先序同时遍历整个树,若两种方法在遍历过程中的节点值相同,就证明这个二叉树是镜像对称的。
代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
return self.cmpSymmetric(root,root)
def cmpSymmetric(self,root1,root2):
if root1 == None and root2 == None:
return True
if root1 == None or root2 == None:
return False
if root1.val != root2.val:
return False
return self.cmpSymmetric(root1.left,root2.right) and self.cmpSymmetric(root1.right,root2.left)