BST - Implementacja w C

0

Witam, chciałem napisać funkcje dodającą na bst (insert) i przeglądającą (inorder). Elementy mają sie dodawać, dopóki nie wpisze -999, wtedy pętla sie przerwie. Program sie kompiluje, po podaniu elementów niby działa, ale po wywołaniu inorder nic nie wyswietla. Możecie rzucic okiem gdzie jest błąd? Dziękuje z góry.

#include<stdio.h>
#include<stdlib.h>

struct eldrzewa
{
    int klucz;
    struct eldrzewa *lewy;
    struct eldrzewa *prawy;
};
struct eldrzewa *korzen=NULL;

void inorder(struct eldrzewa *korzen)
{
    //printf("Wchodze do inorder: ");
    if (korzen!=NULL)
    {
        inorder(korzen->lewy);
        printf("%d ",korzen->klucz);
        inorder(korzen->prawy);
    }
}


void insert(struct eldrzewa *korzen, int klucz)
{
    if (korzen==NULL)
    {
        korzen=(struct eldrzewa*)malloc(sizeof(struct eldrzewa));
        korzen->klucz=klucz;
        korzen->lewy=NULL;
        korzen->prawy=NULL;
    } else
        if (klucz>=(korzen->klucz)) insert(korzen->prawy,klucz);
        if (klucz<(korzen->klucz)) insert(korzen->lewy,klucz);
}

int main()
{
    int klucz,licznik=0,i;
    do
    {
        scanf("%d",&klucz);
        if (klucz==-999) break;
        else insert(korzen,klucz);
    } while (1);

    printf("\n");

    inorder(korzen);

    free(korzen);
    return 0;
}
1
void insert(struct eldrzewa *korzen, int klucz)

Błąd jest tutaj - jeżeli wywołasz ją z parametrem, który będzie równy NULL, to po jej wywołaniu nie ulegnie on zmianie.
Innymi słowy:

struct eldrzewa *var = NULL;
insert(var, cokolwiek);
// tutaj `var` wciąż jest równe `NULL`
0

czyli najlepiej zrobić tak, aby insert przyjmował tylko klucz?

void insert(int klucz)
1

Nie!
W ogóle korzystanie tutaj ze zmiennej globalnej jest błędem - zmienna korzen powinna być lokalna, a void insert(struct eldrzewa *korzen, int klucz) powinno przyjmować jako pierwszy parametr wskaźnik na ten typ, czyli void insert(struct eldrzewa **korzen, int klucz).
Dzięki temu wartość przekazanej zmiennej zmienisz za pomocą (*korzen).

0

Dziękuję za zainteresowanie. Kurcze, ile cudów na wskaźnikach w C sie dzieje. Postaram sie z tym uporać, dzięki Twoim wskazówkom Patryku. Pozdrawiam

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