📜  检查两棵树是否是 Mirror |设置 2(1)

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

检查两棵树是否是 Mirror

在二叉树中,如果两棵树的形状对称,但是它们的节点值可能不同,那么这两棵树被称为镜像树。本文将介绍如何检查两棵树是否是 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)$。