二叉搜索树中的 floor 和 ceiling

2025年3月17日 | 阅读 7 分钟

在二叉搜索树中,下限值(floor)和上限值(ceiling)的概念在查找树中可能不存在的元素时扮演着至关重要的角色。二叉搜索树中给定值的下限值(floor)指的是小于或等于目标值的最大值。另一方面,上限值(ceiling)表示大于或等于指定值的最小值。

从技术上讲,如果所有的值都按排序方式组织,那么下限值(floor)就是紧邻它前面的值。而上限值(ceiling)则是紧随其后的值。

使用下限值(floor)和上限值(ceiling)的一些优点是:-

  1. 当我们要在二叉搜索树中寻找一个目标值时,下限值(floor)和上限值(ceiling)帮助我们找出最接近的值。
  2. 下限值(floor)和上限值(ceiling)的另一个优点是,它能帮助我们确定一系列数据集中的最接近值。
  3. 在邻近搜索中,它们被证明是最重要的;通过找出最接近目标的值,我们可以缩小搜索空间并找到该值。

实施

输出

Floor and Ceiling in Binary Search Tree

代码的分步解释

  1. 代码首先导入C++库中必要的头文件。
  2. 然后,代码着重定义一个名为'Node'的类,该类包含数据值以及指向左右子节点的指针。
  3. 它定义了一个新的辅助函数,帮助我们用给定的值和内存分配一个新的节点。
  4. 定义了'Ceil'函数来查找给定二叉树的上限值。它有两个参数:根节点(root)和输入值(input)。如果二叉搜索树为空,它返回-1值或上限值。
  5. 现在,我们必须检查基本情况。如果树是空的,返回-1。
  6. 现在,验证关键值是否等于输入值。如果这两个值相等,则表示输入值存在,并且根节点的键值作为上限值返回。
  7. 如果根节点的键值小于输入值,那么上限值存在于右子树中;如果它更大,则在左子树中。
  8. 在程序的主函数中,创建了一个二叉树,其根节点的值为8。
  9. 执行一个从0到15的循环,以确定该范围内每个数字的上限值。
  10. 最后,程序返回0,表示程序成功执行。

示例 2)

输出

Floor and Ceiling in Binary Search Tree

代码的分步解释

  1. 代码首先导入必要的头文件,如“stdio.h”和“stdlib.h”。
  2. 然后,代码着重定义一个名为'struct'的二叉树节点结构体,该结构体包含数据值以及指向左右子节点的指针。
  3. 它定义了一个新的辅助函数,帮助我们用给定的值和内存分配一个新的节点。
  4. 定义了'Ceil'函数来查找给定二叉树的上限值。它有两个参数:根节点(root)和输入值(input)。如果二叉搜索树为空,它返回-1值或上限值。
  5. 现在,我们必须检查基本情况。如果树是空的,返回-1。
  6. 现在,验证关键值是否等于输入值。如果这两个值相等,则表示输入值存在,并且根节点的键值作为上限值返回。
  7. 如果根节点的键值小于输入值,那么上限值存在于右子树中;如果它更大,则在左子树中。
  8. 在程序的主函数中,创建了一个二叉树,其根节点的值为8。
  9. 执行一个从0到15的循环,以确定该范围内每个数字的上限值。
  10. 最后,程序返回0,表示程序成功执行。

示例 3)

输出

Floor and Ceiling in Binary Search Tree

代码的分步解释

  1. 代码首先定义'node'和'Binary tree'类。二叉树类包含二叉搜索树本身和一个根节点的引用。
  2. 然后,代码着重定义一个名为'Node'的类,该类包含数据值以及指向左右子节点的指针。
  3. 它定义了一个新的辅助函数,帮助我们用给定的值和内存分配一个新的节点。
  4. 定义了'Ceil'函数来查找给定二叉树的上限值。它有两个参数:根节点(root)和输入值(input)。如果二叉搜索树为空,它返回-1值或上限值。
  5. 现在,我们必须检查基本情况;如果树是空的,返回-1。
  6. 现在,验证关键值是否等于输入值。如果这两个值相等,则表示输入值存在,并且根节点的键值作为上限值返回。
  7. 如果根节点的键值小于输入值,那么上限值存在于右子树中;如果它更大,则在左子树中。
  8. 在程序的主函数中,创建了一个二叉树,其根节点的值为8。
  9. 执行一个从0到15的循环,以确定该范围内每个数字的上限值。
  10. 最后,程序返回0,表示程序成功执行。