witam
program jest jeszcze nie kompletny, poniewaz nie ma przypadku gdy wezel ma jednego potomka. nie wiem czemu ale zawiesza mi sie dla dwoch. czy mógłby ktos wskazac błąd. za kazda pomoc jestem wdzieczny
kod
typedef struct drzewo{
int klucz;
struct drzewo *left,*right,*top;
}drzewo;
drzewo *znajdz(drzewo *root, int k){
drzewo *x=root;
while((x)&&(x->klucz!=k)){
if(x->klucz>k)x=x->left;
else x=x->right;
}
return x;
}
drzewo *pop(drzewo *root, int a ){
drzewo *wsk=znajdz(root,a);
if(wsk->left!=NULL){wsk=wsk->left;while(wsk->right!=NULL)wsk=wsk->right;
}
else{wsk=wsk->top;
while(wsk->klucz<a)wsk=wsk->top;
}
return wsk;
}
drzewo *nast(drzewo *root, int a){
drzewo *wsk=znajdz(root,a);
if(wsk->right!=NULL)
{wsk=wsk->right;
while(wsk->left!=NULL)wsk=wsk->left;}
else
{wsk=wsk->top;
while(wsk->klucz<a)wsk=wsk->top;
}
return wsk;
}
void usun(drzewo *&root, int a ){
drzewo *x=znajdz(root,a);
if((x->right==NULL)&&(x->left==NULL)){
if(x->top->right==x)x->top->right=NULL;
else x->top->right=NULL;
free(x);
}
else if((x->left!=NULL)&&(x->right!=NULL)){
drzewo *y;
if(x->top->right==x){y=nast(root,a);
y->top->left=NULL;
y->top=x->top;
x->top->right=y;
y->right=x->right;
y->left=y->left;
x->left->top=y;
x->right->top=y;
free(x);
}
else{y=pop(root,a);
y->top->right=NULL;
y->top=x->top;
x->top->right=y;
y->right=x->right;
y->left=y->left;
x->left->top=y;
x->right->top=y;
free(x);
}
}}
dziekuje i pozdrawiam
pomoze ktos?