📅  最后修改于: 2023-12-03 15:26:44.794000             🧑  作者: Mango
在二叉树中,如果两棵树的形状对称,但是它们的节点值可能不同,那么这两棵树被称为镜像树。本文将介绍如何检查两棵树是否是 Mirror。
我们可以通过递归检查两棵树是否是镜像树。首先检查根节点是否相同,如果相同,那么递归检查左子树和右子树是否是镜像树,如果左子树和右子树都是镜像树,那么这棵树就是镜像树。
class Solution:
def isMirror(self, root1: TreeNode, root2: TreeNode) -> bool:
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.val != root2.val:
return False
return self.isMirror(root1.left, root2.right) and self.isMirror(root1.right, root2.left)
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return True
return self.isMirror(root.left, root.right)
我们也可以使用迭代的方法检查两棵树是否是镜像树。我们可以使用队列来存储节点,然后从队列中依次弹出两个节点,并比较它们的值是否相同。如果相同,那么再将它们的子节点依次加入队列中。同样,比较这两个节点的子节点是否相同。
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return True
queue = []
queue.append(root.left)
queue.append(root.right)
while len(queue) > 0:
node1 = queue.pop(0)
node2 = queue.pop(0)
if not node1 and not node2:
continue
if not node1 or not node2:
return False
if node1.val != node2.val:
return False
queue.append(node1.left)
queue.append(node2.right)
queue.append(node1.right)
queue.append(node2.left)
return True
以上两种方法都是时间复杂度为 $O(n)$,空间复杂度为 $O(n)$ 的解法。
本文介绍了如何检查两棵树是否是镜像树。我们可以使用递归或迭代的方法来解决这个问题。无论哪种方法,时间复杂度和空间复杂度都是 $O(n)$。