BST z rekursji i podanych struktur

głosy
0

Muszę zakodować kilka sposobów na BST i mam pewne problemy, pozwól mi wyjaśnić.

Mam następujące struktury:

struct node {
    struct node *lChild; 
    struct node *rChild; 
    int value; 
};

i

struct tree {
    struct node *root;
};

wraz z następującymi funkcjami:

struct tree* constructNewTree()
{
    struct tree *T=malloc(sizeof(struct tree));
    T->root=NULL;

    return T;
}

i

struct node* constructNewNode(int i)
{
    struct node *N=malloc(sizeof(struct node));
    N->value=i;
    N->lChild=NULL;
    N->rChild=NULL;

    return N;
}

Aw moim głównym muszę nazwać (na przykład):

int main()
{
    struct tree *T;
    T=constructNewTree();

    insertKey(5,T);
    insertKey(2,T);
    insertKey(9,T);
    return 0;
}

Co muszę zrobić, to stworzyć insertKey function (int i, struktura drzewa * T) za pomocą rekursji.

Chciałem zrobić coś takiego

void insertKey(int i, struct tree *T)
{
    if (T->root==NULL) {
        T->root=constructNewNode(i);
        return;
    }
    else {
        if (i<=T->root->value) {
            T->root->lChild=constructNewNode(i);
        else if (i>T->root->value) {
            T->root->rChild=constructNewNode(i);
        }
    }
}

Ale to nie ma się bardzo daleko, za pomocą rekurencji pozwoliłby mi zadzwonić insertKey ponownie, ale nie wydaje się użyć węzła i drzewo taki sam sposób.

Czy ktoś wie jak mogę to zrobić bez zmiany podanych struktur?

Dziękuję Ci bardzo.

Utwórz 20/03/2011 o 19:16
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

Twój insertKey bierze drzewa jako argument. Drzewo jest jedynie wskaźnik do samego szczytu.

Co polecam Ci zrobić, to napisać funkcję, która pobiera insertKey Node jego argumentacji. Również w tej funkcji, trzeba sprawdzić, czy nie ma innego drzewa na dziecko w lewo / prawo.

Obecnie po prostu zbudować nowy węzeł niezależnie od tego, co tam jest. Spowoduje to zastąpienie wszystkich poprzednich wstawki.

Odpowiedział 20/03/2011 o 19:47
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more