我有一个包含来自简单列表的数据的二叉树,现在我需要平衡它,但它一直给我错误“分段错误(核心转储)”
我的余额代码是:
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);
}
}
}
其中一个轮换代码是:
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));
}