📜  检查两棵树是否是镜像(1)

📅  最后修改于: 2023-12-03 15:26:44.807000             🧑  作者: Mango

检查两棵树是否是镜像

如果两棵二叉树的根节点值相等,并且它们的左右子树都是镜像对称的,那么这两棵二叉树是镜像的。

那么如何判断两棵二叉树是否是镜像的呢?

我们可以使用递归来实现。首先判断两棵树的根节点值是否相等,如果不相等,那么这两棵树肯定不是镜像的。

如果相等,就需要判断这两棵树的左右子树是否是镜像对称的。具体的实现可见下方代码片段。

def isSymmetric(root1, root2):
    if root1 is None and root2 is None:  # 两棵树均为空,是镜像对称的
        return True
    if root1 is None or root2 is None:  # 只有其中一棵树为空,不是镜像对称的
        return False
    if root1.val != root2.val:  # 根节点的值不相等,不是镜像对称的
        return False
    # 递归判断左右子树是否是镜像对称的
    return isSymmetric(root1.left, root2.right) and isSymmetric(root1.right, root2.left)

这个函数会返回一个布尔值,指示两棵树是否是镜像对称的。

下面是一些测试用例,可以用来验证上述代码是否正确。

# 构造两棵镜像对称的树
root1 = TreeNode(1)
root1.left = TreeNode(2)
root1.right = TreeNode(2)
root1.left.left = TreeNode(3)
root1.left.right = TreeNode(4)
root1.right.left = TreeNode(4)
root1.right.right = TreeNode(3)

root2 = TreeNode(1)
root2.left = TreeNode(2)
root2.right = TreeNode(2)
root2.left.left = TreeNode(4)
root2.left.right = TreeNode(3)
root2.right.left = TreeNode(3)
root2.right.right = TreeNode(4)

# 判断两棵树是否是镜像对称的
print(isSymmetric(root1, root2))  # True

# 构造两棵不镜像对称的树
root1 = TreeNode(1)
root1.left = TreeNode(2)
root1.right = TreeNode(2)
root1.left.right = TreeNode(3)
root1.right.right = TreeNode(3)

root2 = TreeNode(1)
root2.left = TreeNode(2)
root2.right = TreeNode(2)
root2.left.right = TreeNode(4)
root2.right.right = TreeNode(4)

# 判断两棵树是否是镜像对称的
print(isSymmetric(root1, root2))  # False

以上是本文的全部内容。希望对你有所帮助!