📅  最后修改于: 2023-12-03 14:50:46.508000             🧑  作者: Mango
这是一道关于二叉树的问题。题目要求我们判断两个给定的二叉树是否镜像对称。换句话说,就是判断两棵二叉树是否满足如下条件:
1.它们都是空树,或者都是非空树。
2.它们的根节点具有相同的值。
3.每个树的右子树都与另一个树的左子树镜像对称。
判断两棵树是否镜像对称,可以用递归来解决。如果两棵树的根节点为空,则它们是对称的;如果两棵树的根节点值相同,并且左子树与另一个树的右子树镜像对称,右子树与另一个树的左子树镜像对称,则这两棵树是对称的。
下面是判断两棵树是否对称的代码:
def is_symmetric(root1, root2):
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.val != root2.val:
return False
return is_symmetric(root1.left, root2.right) and is_symmetric(root1.right, root2.left)
def is_mirror(root):
if not root:
return True
return is_symmetric(root.left, root.right)
我们可以使用以下代码来测试上述代码:
class Node:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
root = Node(1, Node(2, Node(3), Node(4)), Node(2, Node(4), Node(3)))
assert is_mirror(root) == True
root = Node(1, Node(2, None, Node(3)), Node(2, None, Node(3)))
assert is_mirror(root) == False
本题要求判断两个二叉树是否镜像对称,可以用递归的方法。如果两个树的根节点为空,则它们是镜像对称的;如果两个树的根节点不为空,并且它们的值相同,并且它们的左子树与右子树镜像对称,右子树与左子树镜像对称,则它们是镜像对称的。