首页 > 解决方案 > 检查一棵树是否是一面镜子

问题描述

你好我有一个代码来检查一棵树是否是镜像树。但是它并没有通过 leetcode 上的所有测试用例。

我在网上查看了其他资源,但似乎无法找出我的代码中的错误。

# 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):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if root is None:
            return True

        if root.left and root.right:
            return self.is_symmetric(root.left,root.right) 

    def is_symmetric(self, left, right):

        if (left == None and right == None):
            return True
        if right is None or left is None:
            return False
        if left.val == right.val:
            return True
        return self.is_symmetric(left.left,right.right) and self.is_symmetric(left.right,right.left) 

谢谢!

标签: pythontree

解决方案


当检查的条件root.left and root.rightFalse时,您的isSymmetric函数会隐式返回None。相反,它应该继续检查是否其中之一root.left,在这种情况下它应该返回;否则两者和都是,它应该返回。另外,在函数中,这并不意味着左子树与右子树对称,因为它们下面可能有更多的子树。它应该在以下情况下简单地返回:root.rightNoneFalseroot.leftroot.rightNoneTrueis_symmetricleft.val == right.valFalseleft.val != right.val

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if root is None:
            return True
        if root.left and root.right:
            return self.is_symmetric(root.left,root.right)
        if root.left or root.right:
            return False
        return True

    def is_symmetric(self, left, right):

        if left is None and right is None:
            return True
        if right is None or left is None or left.val != right.val:
            return False
        return self.is_symmetric(left.left, right.right) and self.is_symmetric(left.right, right.left) 

推荐阅读