📅  最后修改于: 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
以上是本文的全部内容。希望对你有所帮助!