📅  最后修改于: 2023-12-03 15:26:44.586000             🧑  作者: Mango
给定两个二叉搜索树(Binary Search Tree,简称BST),写一个函数来判断它们是否相同。
当且仅当两个BST结构相同且对应节点的值相同时,判定为相同。
对于BST,其特点是左子树上所有节点的值都小于根节点,右子树上所有节点的值都大于根节点。因此,我们可以采用递归的方式来解决这个问题。具体来说,我们可以进行如下步骤:
False
。对于步骤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之间比较它们的结构和节点值,以便找到它们之间的关系。