📅  最后修改于: 2023-12-03 14:55:44.056000             🧑  作者: Mango
在二叉树的数据结构中,两棵二叉树被称为镜像(或对称),当且仅当它们互为镜像。也就是说,一棵树的左子树与另一棵树的右子树相等,同时一棵树的右子树与另一棵树的左子树相等。本文将介绍如何检查两棵二叉树是否镜像。
给定两棵二叉树,编写一个函数来判断它们是否是镜像的。
通过递归遍历两棵二叉树的对应节点,判断它们的值是否相等,并且左子树与右子树分别对称。如果两棵树都为空,则为镜像。如果一棵树为空,而另一棵树不为空,则不是镜像。如果两棵树的当前节点不相等,则不是镜像。
算法步骤:
isMirror(root1.left, root2.right)
和 isMirror(root1.right, root2.left)
。利用队列保存需要比较的节点。开始时将两棵树的根节点加入队列中,然后比较队列中的两个节点,如果它们的值不相等,则不是镜像。然后按照镜像的对称关系将节点加入队列,并继续比较队列中的节点,直到全部节点比较完成。如果最后队列为空,则是镜像。
算法步骤:
def isMirror(root1, root2):
if root1 is None and root2 is None:
return True
if root1 is None or root2 is None:
return False
return (root1.val == root2.val
and isMirror(root1.left, root2.right)
and isMirror(root1.right, root2.left))
from collections import deque
def isMirror(root1, root2):
queue = deque([(root1, root2)])
while queue:
node1, node2 = queue.popleft()
if node1 is None and node2 is None:
continue
if node1 is None or node2 is None:
return False
if node1.val != node2.val:
return False
queue.append((node1.left, node2.right))
queue.append((node1.right, node2.left))
return True