Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ b树实现中的元素无序_C++_B Tree - Fatal编程技术网

C++ b树实现中的元素无序

C++ b树实现中的元素无序,c++,b-tree,C++,B Tree,我对B-树(不是二叉树)有问题。它适用于某些值,但当我尝试使用(1,2,3,4,5,6)时,我得到以下输出: 0级:2 4 一级:1 3 6 5 当正确的输出为 0级:2 4 一级:1 3 5 6 我需要帮助,我找不到我的代码有什么问题 这是我的密码: 模板 void ArvoreB::插图(ArvoreB*A,tk){ 帕吉纳*r=A->raiz; 如果(r->n==2*a-1){ Pagina*s=新的Pagina(); s->folha=false; s->n=0; s->c[0]=r

我对B-树(不是二叉树)有问题。它适用于某些值,但当我尝试使用(1,2,3,4,5,6)时,我得到以下输出:

0级:2 4
一级:1 3 6 5
当正确的输出为

0级:2 4
一级:1 3 5 6
我需要帮助,我找不到我的代码有什么问题

这是我的密码:

模板
void ArvoreB::插图(ArvoreB*A,tk){
帕吉纳*r=A->raiz;
如果(r->n==2*a-1){
Pagina*s=新的Pagina();
s->folha=false;
s->n=0;
s->c[0]=r;//Comoéo primeiro filho que recebe r,entaoéna posiço 0(primerio filho)
A->raiz=s;
ArvoreBDivideFilho(s,0,r);//0éa posiço que vai receber o valor;
ArvoreBInsereNaoCheio(s,k);
}否则{
ArvoreBInsereNaoCheio(r,k);
}
}
模板
void ArvoreB::ArvoreBDivideFilho(Pagina*x,inti,Pagina*y){//a Pagina x vai receiber a Pagina y e z
Pagina*z=新的Pagina();
z->folha=y->folha;
z->n=a-1;
对于(int j=0;j键[j]=y->键[j+a];
}//copia a PARE direita pra um filho
如果(不是y->folha)//passa o filho dos filhos pros lugares certos
对于(int j=0;j c[j]=y->c[j+a];
y->n=a-1;//cortou a metade,entao fica a-1 chaves
对于(intj=x->n;j>(i+1);j--){
x->c[j+1]=x->c[j];
cout n;j>=i;j--){
x->keys[j+1]=x->keys[j];//将empurra作为键tmb。。。
}
x->键[i]=y->键[a-1];
x->n++;
//阿奎塔尔维兹·阿迪西奥纳尔·阿尔古马·科萨。。。
//磁盘写入X Y Z
}
模板
void ArvoreB::ArvoreBInsereNaoCheio(Pagina*x,tk){
int i=x->n-1;
如果(x->folha){
而(i>=0和k键[i]){//Arrasta pro lado,tudo que代表maior que k
x->键[i+1]=x->键[i];
我--;
}
x->键[i+1]=k;
x->n++;
}否则{
而(i>=0和kkeys[i])i--;//acha o filho
i++;
//Achou o filho certo(x->c[i])
//Pagina*f=磁盘读取(x->c[i]);
Pagina*f=x->c[i];
如果(f->n==2*a-1){//Pagina cheia
ArvoreBDivideFilho(x,i,f);
如果(k>x->keys[i])i++;
}
ArvoreBInsereNaoCheio(f,k);
}
}

我确实认为问题就在
阿沃雷宾塞雷纳奥切约的末尾附近:

Pagina *f = x->c[i];
if(f->n == 2*a-1){ // Pagina cheia
    ArvoreBDivideFilho(x,i,f);
    if(k>x->keys[i])i++;
}
ArvoreBInsereNaoCheio(f,k);
i
递增,但使用了旧的
f
。在最后一行之前添加
f=x->c[i];
应该可以解决问题