📜  检查两个二叉搜索树是否相同(1)

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

检查两个二叉搜索树是否相同

在二叉搜索树中,每个节点都比其左子树中的所有节点大,比其右子树中的所有节点小。因此,如果想要检查两个二叉搜索树是否相同,可以通过比较树中所有节点的值是否相同来实现。本文将介绍两种方法,分别为递归方法和迭代方法。

递归方法

递归方法是一种简单易懂的方法。我们可以先比较根节点的值是否相同,然后递归比较左子树和右子树的值是否相同。如果两个二叉搜索树的根节点和所有子节点的值都相同,则它们相同。

以下是基于递归方法的Python代码:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not p and not q:
            return True
        elif not p or not q:
            return False
        elif p.val != q.val:
            return False
        else:
            return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
迭代方法

另一种方法是使用迭代方法。迭代方法使用队列来实现广度优先搜索。我们需要将根节点加入到队列中,然后逐个比较队列中的节点值是否相同。首先比较根节点的值,然后将左右子节点加入到队列中。之后再逐个比较队列中的节点值是否相同。如果两个二叉搜索树的根节点和所有子节点的值都相同,则它们相同。

以下是基于迭代方法的Python代码:

from collections import deque

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        queue1 = deque()
        queue2 = deque()
        queue1.append(p)
        queue2.append(q)

        while queue1 and queue2:
            node1 = queue1.popleft()
            node2 = queue2.popleft()

            if not node1 and not node2:
                continue
            elif not node1 or not node2:
                return False
            elif node1.val != node2.val:
                return False

            queue1.append(node1.left)
            queue1.append(node1.right)
            queue2.append(node2.left)
            queue2.append(node2.right)

        return True

以上就是检查两个二叉搜索树是否相同的方法。考虑到递归方法和迭代方法各有优点,建议在实际应用中根据具体情况选择方法。