Drzewo BST-usuwanie węzła

0

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ą.

0
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) {
                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;
        delete_bst(&(*drzewo)->P,temp->Dana);
        }
    }
        return;

}

Naprawiłem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1