単純なリストからのデータを含むバイナリ ツリーがあり、バランスをとる必要がありますが、「セグメンテーション違反 (コア ダンプ)」というエラーが表示され続けます。
私の残高コードは次のとおりです。
NodoAB * balance(NodoAB *A){
int D=0,E=0;
if(A==NULL)
return(NULL);
if(fabs(countNodesAB(A->fe)-countNodesAB(A->fd))<=1)
return (A);
if(countNodesAB(A->fe)-countNodesAB(A->fd)<=-2){
D=countNodesAB(A->fd->fd);
printf("D:%d\n",D);
E=countNodesAB(A->fd->fe);
printf("E:%d\n",E);
if(E-D==1)
return(rotationLeft(A));
else{
A=rotationRight(A);
A->fd=rotationLeft(A->fd);
return(A);
}
}
}
ローテーションコードの1つは次のとおりです。
NodoAB * rotationLeft(NodoAB *A){
NodoAB *aux,*aux2;
if(A==NULL)
return(NULL);
if(A->fd==NULL)
return(A);
aux=A;
A=A->fd;
aux2=A->fe;
A->fe=aux;
aux->fd=aux2;
return(A);
}
ノード数:
int countNodesAB(NodoAB *A){
if(A==NULL)
return 0;
return(1+countNodesAB(A->fe)+countNodesAB(A->fd));
}