我是数据结构的初学者。
我正试图为一个带有splay trees的range函数编写一些伪代码:Range(S, A, B),它将S更改为其所有成员的集合,对于这些成员,键值C满足a≤C≤B。我知道splay trees属于二进制搜索树的类型,并实现了它们自己的splay操作基本上,我试图返回一系列介于a和b之间的值。但是,我很难理解应该如何执行此操作,或者应该从何处开始,以及应该检查哪些条件。我已经阅读了splay树的定义,并且知道它们就像使用move-to-front算法的二进制搜索树。
这就是我目前所拥有的:

Algorithm Range(Array S, int A, int B): array Set
S = new array(size) //Initialize an empty array of some size
if (A > B) then return NULL

在这一点之后,我只是觉得有些失落。我不知道如何检查八字树的值。请让我知道,如果我可以提供额外的信息,或我应该去的方向。

最佳答案

根据Wikipedia
splay树是一种自调整的二叉搜索树,具有最近访问的元素可以快速再次访问的附加属性它在o(log n)摊销时间内执行插入、查找和删除等基本操作。
然而,由于“splay”操作仅适用于随机搜索,因此该树可以被视为普通的“二进制搜索树”。
算法变成,

Range (BSTree T, int A, int B)
  int Array S

  S ← Empty array
  If A <= B then
    For each C in T
      If A <= C and C <= B then
        Append C to S
  Return S

即按顺序遍历树t;对于满足条件的每个项c,将该项添加到数组s中。如果没有项满足条件,则返回空数组。
For each如果在实现语言中不可用,则可以使用描述为in-order的算法来实现。
inorder(node)
  if (node = null)
    return
  inorder(node.left)
  visit(node)
  inorder(node.right)

其中vist(node)是测试项目是否符合条件的地方。

10-06 13:31