BST met een recursie en bepaalde structuren

stemmen
0

Ik moet een aantal methoden voor een BST-code en ik heb wat problemen, laat het me uitleggen.

Ik heb de volgende structuren:

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

en

struct tree {
    struct node *root;
};

samen met de volgende functies:

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

    return T;
}

en

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

    return N;
}

En in mijn hoofd moet ik dit (bijvoorbeeld) te bellen:

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

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

Wat ik moet doen is om de functie insertKey te maken (int i, struct boom * T) met behulp van de recursie.

Ik wilde iets doen

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

Maar het hoeft niet zo ver te krijgen, met behulp van de recursie me zou toestaan ​​om insertKey opnieuw te bellen, maar ik kan niet schijnen om een ​​knooppunt en een boom op dezelfde manier te gebruiken.

Weet iemand hoe ik dat kon doen zonder de gegeven structuren?

Dank u zeer.

De vraag is gesteld op 20/03/2011 om 19:16
bron van user
In andere talen...                            


1 antwoorden

stemmen
1

Uw insertKey neemt een Boom als argument. Een boom is slechts een pointer naar de top.

Wat ik raden je doet is schrijven een insertKey functie die een Node neemt voor zijn argument. Ook in deze functie, moet u controleren om te zien of er een andere boom op de links / rechts kind.

Op dit moment je gewoon de bouw van een nieuw knooppunt, ongeacht wat er is. Dit zal alle vorige toevoegingen overschrijven.

antwoordde op 20/03/2011 om 19:47
bron van user

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