BST med en rekursjon og gitte strukturer

stemmer
0

Jeg må kode noen metoder for en BST og jeg har noen problemer, la meg forklare.

Jeg har følgende strukturer:

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

og

struct tree {
    struct node *root;
};

sammen med følgende funksjoner:

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

    return T;
}

og

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

    return N;
}

Og i min viktigste må jeg kaller dette (for eksempel):

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

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

Hva jeg har å gjøre er å lage funksjonen insertKey (int i, struct tre * T) ved hjelp av rekursjon.

Jeg ønsket å gjøre noe sånt

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);
        }
    }
}

Men det gjør ikke så veldig langt, ved hjelp av rekursjon ville tillate meg å kalle insertKey igjen, men jeg kan ikke synes å bruke en node og et tre på samme måte.

Vet noen hvordan jeg kunne gjøre det uten å endre de gitte strukturene?

Tusen takk.

Publisert på 20/03/2011 klokken 18:16
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Din insertKey tar et tre som sitt argument. A Tree er bare en peker til topps.

Det jeg anbefaler at du gjør er å skrive en insertKey funksjon som tar en Node for sin argumentasjon. Også i denne funksjonen, må du sjekke for å se om det er et annet tre på venstre / høyre barn.

Nå har du bare bygge en ny node uavhengig av hva som er der. Dette vil overskrive eventuelle tidligere innsettinger.

Svarte 20/03/2011 kl. 18:47
kilden bruker

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