BST con una ricorsione e fornite strutture

voti
0

Devo codificare alcuni metodi per un BST e ho alcuni problemi, lasciatemi spiegare.

Ho le seguenti strutture:

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

e

struct tree {
    struct node *root;
};

insieme alle seguenti funzioni:

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

    return T;
}

e

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

    return N;
}

E nel mio principale devo chiamare questo (per esempio):

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

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

Quello che devo fare è quello di creare la funzione insertKey (INT, struct albero * T) usando la ricorsione.

Volevo fare qualcosa di simile

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

Ma non molto lontano, utilizzando la ricorsione mi avrebbe permesso di chiamare di nuovo insertKey ma io non riesco a utilizzare un nodo e un albero allo stesso modo.

Qualcuno sa come potrei farlo senza alterare le strutture date?

Grazie mille.

È pubblicato 20/03/2011 alle 19:16
fonte dall'utente
In altre lingue...                            


1 risposte

voti
1

Il tuo insertKey prende un albero come argomento. Un albero è solo un puntatore alla cima.

Quello che vi consiglio di fare è scrivere una funzione insertKey che prende un nodo per la sua tesi. Anche in questa funzione, è necessario controllare per vedere se c'è un altro albero sul bambino sinistra / destra.

Attualmente è solo costruire un nuovo nodo indipendentemente da quello che c'è. Questo sostituirà eventuali inserimenti precedenti.

Risposto il 20/03/2011 a 19:47
fonte dall'utente

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