📅  最后修改于: 2023-12-03 15:13:43.567000             🧑  作者: Mango
BST(二叉搜索树)是一种数据结构,其中每个节点都包含一个键值,左子树的所有键值小于该节点的键值,而右子树的所有键值都大于该节点的键值。在这种结构中,查询具有某些属性的密钥变得相对容易,其中包括有序前任和后继
我们假设你已经熟悉二叉树和BST的基础知识。如果你对此不熟悉,可以参考以下链接:
给定BST中的一个键,“有序前任”是指小于该键且不大于任何其他键的键值中的最大键值。
以下是定义有序前任数值的递归函数,它返回BST中给定键的最大值。
def inorder_predecessor(root, key):
if not root:
return None
if root.key >= key:
return inorder_predecessor(root.left, key)
right_val = inorder_predecessor(root.right, key)
return right_val if right_val else root.key
这个递归函数采用以下方法:
给定BST中的一个键,“有序后继”是指大于该键且不小于任何其他键的键值中的最小键值。
以下是定义有序后继数值的递归函数,它返回BST中给定键的最小值。
def inorder_successor(root, key):
if not root:
return None
if root.key <= key:
return inorder_successor(root.right, key)
left_val = inorder_successor(root.left, key)
return left_val if left_val else root.key
这个递归函数采用以下方法:
有序前任和有序后继在许多情况下都会得到很好的利用。比如在一个BST中查找一个数时,可以用前驱和后继来判断目标数是否在BST中,并且还可以用它们来找到重复键。
上述实现方式是递归的,如果你对递归的工作原理感到困惑,我们可以使用迭代方式来实现这两个函数。
以上是有序前任和后继的相关介绍,希望对你有所帮助。