求取给定的二叉树的镜像_leetcode101. 对称二叉树

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)

结果:

bc2e70566df98fb1bb7f5d2a630e2bfd.png

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