Napisałem taką funkcję:
struct TWezel* FindMin(struct TWezel** node)
{
if((*node)==NULL)
{
return NULL;
}
if((*node)->L)
return FindMin(&(*node)->L);
else
return *node;
}
void delete_bst(struct TWezel **drzewo, int dana)
{
struct TWezel *temp;
if ((*drzewo) == NULL){
printf("Siema0\n");
return;
}
printf("Siema214\n");
if ((*drzewo)->Dana > dana)
{
if((*drzewo)->L!=NULL){
printf("%d (*drzewo)eloszka\n",(*drzewo)->Dana);
delete_bst(&((*drzewo)->L), dana);
}
}
else if ((*drzewo)->Dana < dana)
{
if((*drzewo)->P!=NULL){
printf("smiec\n");
delete_bst(&((*drzewo)->P), dana);
}
}
else{
if((*drzewo)->L==NULL&&(*drzewo)->P==NULL)
{
free(*drzewo);
printf("Siema\n");
}
else if ((*drzewo)->L == NULL) {
printf("Siema2\n");
struct TWezel *temp = (*drzewo);
(*drzewo) = (*drzewo)->P;
free(temp);
}
// case 3: one child (left)
else if ((*drzewo)->P == NULL) {
printf("Siema3\n");
struct TWezel *temp = (*drzewo);
(*drzewo) = (*drzewo)->L;
free(temp);
}
// case 4: two children
else {
printf("Siema4\n");
struct TWezel *temp = FindMin(&(*drzewo)->P);
(*drzewo)->Dana = temp->Dana;
}
}
return;
}
Nie mam pojęcia czemu robi się pętla nieskończona. Jakieś randomowe cyfry wyskakują.