当前位置: 首页 > 知识库问答 >
问题:

地板实现在二叉查找树

羊舌源
2023-03-14

考虑一下Robert Sedgewick在他的网站上的声明:

我非常困惑,当键大于根时会发生什么,尤其是当他说:“但只有当右子树中有一个键小于或等于键时”。我想他的意思是,如果键小于根,那么键肯定在左子树中。另一方面,如果密钥更大,则密钥“可能”在正确的子树中,因此也可能在正确的子树上找不到密钥。根据他的floor()方法

public Key floor(Key key)
{
   Node x = floor(root, key);
   if (x == null) return null;
   return x.key;
}

private Node floor(Node x, Key key)
{
   if (x == null) return null;
   int cmp = key.compareTo(x.key);
   if (cmp == 0) return x;
   if (cmp < 0)  return floor(x.left, key);
   Node t = floor(x.right, key);
   if (t != null) return t;
   else           return x;
}

他确实检查了右子树,但没有检查左子树。但我完全不能想出一个例子,其中键大于根,但小于右子树中的键。我真的认为这是不可能的。我错过了一些东西。有人能解释我遗漏了什么吗?

共有2个答案

梁嘉澍
2023-03-14

一个简单的解决方案:

            int FloorInBST(Node* root,int data)
            {
              if(root == NULL)
              {
                  return -1;//when MinNode of tree is greater than the input value
              }
              if(root->data == data) return data;

              if(root->data > data)
              {
                  return FloorInBST(root->left, data);//MUST be in left subtree 
              }
              else if (root->data < data)
              {
                  //MAY be in right subtree OR root itself
                  int floor = FloorInBST(root->right, data);
                  return (root->data >= floor ? root->data:floor);
              }
            }
荆煌
2023-03-14

如果你有一棵树喜欢(原谅我的ASCII艺术技巧)

  3
 / \
1   5

那么你要找的是第(4)层

  1. 搜索键大于root
  2. 右子树中没有比搜索键小的键,因此
  3. 结果是根键(3)
 类似资料:
  • 我正在尝试将leafCount()和nodeCount()实现到这个递归二叉树程序中。在测试时,这两种方法(或它们的测试)都会失败,因此显然它们没有按预期工作。我搞不清自己哪里做错了,哪里想错了。如果有人能解释我做错了什么或指出问题所在,我将非常感激。

  • 本文向大家介绍python实现二叉查找树实例代码,包括了python实现二叉查找树实例代码的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是python实现二叉查找树的相关内容,具体介绍及实现如下。 1. 二叉查找树的定义: 左子树不为空的时候,左子树的结点值小于根节点,右子树不为空时,右子树的结点值大于根节点,左右子树分别为二叉查找树 2. 二叉查找树的最左边的结点即为最小值,要查找最小

  • 我正在努力实现二叉搜索树。完成实现所需的功能之一是重新平衡功能。 根据规范,该功能的工作方式如下: rebalance() 方法应创建一个平衡树,从而将偏度降低为零。平衡树是指在整个树中,左子树和右子树的大小相差不超过1(即,每个子树也是平衡的)。 为了平衡树,rebalance() 方法应反复将根值移动到较小的子树,并将最小/最大值从较大的子树移动到根,直到树平衡。然后,它应该以递归方式平衡两个

  • 主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:

  • 本文向大家介绍Ruby实现的最优二叉查找树算法,包括了Ruby实现的最优二叉查找树算法的使用技巧和注意事项,需要的朋友参考一下 算法导论上的伪码改写而成,加上导论的课后练习第一题的解的构造函数。

  • 我们已经看到了两种不同的方法来获取集合中的键值对。回想一下,这些集合实现了 map 抽象数据类型。我们讨论的 map ADT 的两个实现是在列表和哈希表上的二分搜索。在本节中,我们将研究二叉查找树作为从键映射到值的另一种方法。 在这种情况下,我们对树中项的确切位置不感兴趣,但我们有兴趣使用二叉树结构来提供高效的搜索。