leetcode101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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方法:递归
思路:
其实这道题我最开始想到的是,中序遍历,然后判断回文......但是这样是不对的,因为只凭中序遍历是不能确认二叉树唯一。之前做过的题,根据两种遍历构造二叉树,两种遍历才可以确认一棵树。因此是不对的。
二叉树问题一定可以通过递归来解决。我们递归函数中参数为两个结点,我们以示例1的第二层两个节点为例,只有一个节点的左结点与另一个结点的右结点一样且这两个结点的val相等,才可以说明是镜像的。而判断两个结点的左右结点是不是一样,就是继续调用函数递归的过程。
下面我们考虑递归终止条件,如果传入的两个点都为none,那么结束递归,返回True;如果一个为none,另一个不是,结束递归返回False。
我们调用这个函数,令两个参数结点都为root,即可得到答案。
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
def check(root1,root2):
if not root1 and not root2:#都为none,返回True
return True
elif not root1 or not root2: #一个为none另一个不是,返回False
return False
return root1.val == root2.val and check(root1.left,root2.right) and check(root2.left,root1.right) #满足这三个条件,才返回True
return check(root,root)结果:

版权声明:本文为weixin_30444191原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。