首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个结点中有多个元素的B-树中递归地寻找第k个最小元素

在一个结点中有多个元素的B-树中递归地寻找第k个最小元素
EN

Stack Overflow用户
提问于 2018-06-03 17:19:26
回答 1查看 618关注 0票数 1

假设我们有下面的b-tree

我想创建一个算法,以便找到第k个最小的元素。我试图实现这个link中所写的东西,但我发现似乎没有一个解决方案适用于这种树。

到目前为止,我已经这样做了,它对最后一个分支的元素运行得很好。

代码语言:javascript
运行
复制
i <-0
function kthSmallestElement(Node node, int k)
    if(branch[i] != NULL) then
        size<-branch[i].size();
    if(k < size) then
        i++;
        call the function recursively for new branch[i], k
    else if(k > size) then
        k-=size
        i++;
        call the function recursively for new branch[i], k
    else if (k==size) then
        print branch[i]->entry[k-1]
    else
        print brach[i-1]->entry[k-1]
end function

我已经用C++实现了算法

代码语言:javascript
运行
复制
#define MAX 4      /* maximum number of keys in node. */
#define MIN 2      /* minimum number of keys in node */

typedef int Key;

typedef struct {
   Key key;
   int value;     /* values can be arbitrary */
} Treeentry;


typedef enum {FALSE, TRUE} Boolean;

typedef struct treenode Treenode;

struct treenode {
  int count;     /* denotes how many keys there are in the node */
    /*
        The entries at each node are kept in an array entry 
          and the pointers in an array branch
    */
  Treeentry entry[MAX+1];
  Treenode *branch[MAX+1];
};

int i = 0;
int size = 0;
void FindKthSmallestElement(Treenode *rootNode, int k){
  if(branch[i] != NULL) //since the node has a child
    size = branch[i] ->count;
    if(k < size){
      i++;
      FindKthSmallestElement(branch[i], k);
    }else if(k > size){
      k-=size;
      i++;
      FindKthSmallestElement(branch[i], k);
    }else if (k==size)
      printf ("%d", branch[i]->entry[k-1].key);
    else
      printf ("%d", brach[i-1]->entry[k-1].key);
}

你能建议我应该在这个问题上做些什么,以便对每个第k个最小的元素都有一个有效的输出?我倾向于认为这个问题不能递归解决,因为我们在每个节点中都有多个条目。明智的做法是将其设置为堆树,如下面的link所示

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50664889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档