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

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

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

问题描述

给定两个二叉搜索树(Binary Search Tree,简称BST),写一个函数来判断它们是否相同。

当且仅当两个BST结构相同且对应节点的值相同时,判定为相同。

解决方案

对于BST,其特点是左子树上所有节点的值都小于根节点,右子树上所有节点的值都大于根节点。因此,我们可以采用递归的方式来解决这个问题。具体来说,我们可以进行如下步骤:

  1. 判断根节点是否相同。如果不相同,直接返回False
  2. 递归判断左子树是否相同。
  3. 递归判断右子树是否相同。

对于步骤2和步骤3,它们的判断方式与步骤1相同。这是一个典型的递归思想,具体的代码如下:

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

def is_same_tree(p: TreeNode, q: TreeNode) -> bool:
    """
    判断两个二叉搜索树是否相同
    """
    if p is None and q is None:
        return True
    if p is None or q is None or p.val != q.val:
        return False
    return is_same_tree(p.left, q.left) and is_same_tree(p.right, q.right)

其中,TreeNode是表示BST中的一个节点的类,它包含了节点的值以及左右子树两个属性。is_same_tree是判断两个二叉搜索树是否相同的函数。在函数中,我们首先判断两个节点是否都为空,如果是,则返回True;如果其中一个节点为空或两个节点的值不相同,返回False。否则,递归判断左右子树是否相同。

这个算法的时间复杂度与树的大小有关,即$O(n)$,其中$n$为树的节点数。因为我们需要递归访问所有的节点才能得到答案。

总结

本文介绍了一个判断两个二叉搜索树是否相同的算法,采用了递归的思想。这个算法的时间复杂度为$O(n)$,其中$n$为树的节点数。通过这个算法,我们可以在两个BST之间比较它们的结构和节点值,以便找到它们之间的关系。