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

二叉搜索树选择方法的实现

章烨烨
2023-03-14

我现在正在看罗伯特·塞奇威克的算法书。在这本书中,我试图理解select方法在二叉搜索树中的实现。作者用BST实现了一个符号表。作者描述select方法如下:

假设我们寻找秩为k的密钥(该密钥使得BST中的其他密钥精确地k个更小)。如果左子树中的键数t大于k,则我们在左子树中(递归地)寻找秩为k的键;如果t等于k,我们返回根处的键;如果t小于k,我们在右子树中递归地寻找秩为k-t-1的键。像往常一样,这个de-scription既是面向页面上递归select()方法的基础,也是通过归纳证明它按预期工作的基础。

我想具体了解当左节点的大小小于小于k的键数时,k-t-1传递给递归选择方法的目的是什么。

 public Key select(int k)
  {
     return select(root, k).key;
  }

  private Node select(Node x, int k)
  {   // Return Node containing key of rank k.
      if (x == null) return null;
      int t = size(x.left);
      if      (t > k) return select(x.left,  k);
      else if (t < k) return select(x.right, k-t-1);
      else            return x;
}

共有1个答案

松高爽
2023-03-14

k-t-1等于k-(t+1)。当t

 类似资料:
  • 我正在尝试为我一直在研究的BST结构实现一个移除方法。以下是包含查找、插入和删除方法的代码: 我被告知可以使用insert方法来帮助我使用remove方法,但我只是不知道如何获取最小/最大的元素,然后用该值替换我正在删除的元素,然后递归地删除我获取替换值的节点,同时仍然保持O(logn)的复杂性。有人有什么想法或明显的漏洞我错过了,或任何其他有帮助的,因为我撞我的头在这个问题上? 编辑:我用答案的

  • 我正在制作一个按字符串键排序的二叉搜索树。每个节点由一个与一个键相关联的无序信息链表组成。这棵树是按字母顺序排列的。 我已经完成了大部分的程序,但有麻烦的删除方法。 谢谢你。

  • 本文向大家介绍C#创建二叉搜索树的方法,包括了C#创建二叉搜索树的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#创建二叉搜索树的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:

  • 树的特征和定义 树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树: 树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。 每个节点可以有多个子节点(children),而该节点是相应子节点的父节点(parent)。比如说,3,5是6的子节点,6是3,

  • 我正在研究数据结构,我遇到了一个难题。目标是根据数组元素的值将数组元素插入到二叉搜索树中,即(主树的根节点为数组[0],左子树的根_node小于父节点,右子树的根节点大于父节点)。这将递归进行,直到所有数组元素都插入BST。 我实现了两个类: 这表示具有属性的节点(数据,左,右): 是BST的私有方法,它执行将节点插入树的实际工作。我将其与分开,因为需要使用RSpec评估的预期解决方案。 然后,我