我有一個數據二叉樹從一個簡單的列表,現在我需要平衡,但它不斷給我的錯誤「分段錯誤(核心轉儲)」通過旋轉ANSI C平衡二叉樹
我的平衡碼是:
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));
}
請不要'返回(A);'! 'return'不是一個函數。 – 2012-12-18 14:43:05
@ H2CO3可惜。如果是這樣,那就是結束所有功能的功能。 –
@DanielFischer如果我的感覺正確,我們在這裏進入lambda微積分...:P – 2012-12-18 14:49:37