Perché questa funzione di ricerca restituisce un puntatore a un puntatore?

voti
1
#ifndef _BST_H_

/* Returns negative (left<right), zero (left==right), or positive (left>right). */
typedef int comparator(void* left, void* right);

struct bst_node {
    void* data;
    struct bst_node* left;
    struct bst_node* right;
};

struct bst_node* new_node(void* data);
void free_node(struct bst_node* node);
struct bst_node** search(struct bst_node** root, comparator compare, void* data);
void insert(struct bst_node** root, comparator compare, void* data);
void delete(struct bst_node** node);

#endif

Si tratta di un file di intestazione. Non capisco circa searchla funzione, perché è il tipo di ritorno node**?

Modificato: aggiunto di ricerca func qui:

struct bst_node** search(struct bst_node** root, comparator compare, void* data) {
    struct bst_node** node = root;
    while (*node != NULL) {
        int compare_result = compare(data, (*node)->data);
        if (compare_result < 0)
            node = &(*node)->left;
        else if (compare_result > 0)
            node = &(*node)->right;
        else
            break;
    }
    return node;
}
È pubblicato 21/03/2011 alle 05:46
fonte dall'utente
In altre lingue...                            


1 risposte

voti
2

Direi che la funzione restituisce un puntatore a un puntatore in modo che la vostra searchfunzione può essere utilizzata per implementare insert. Se searchsolo restituisce un puntatore a un nodo e il nodo non viene trovato, poi si deve camminare di nuovo l'albero di capire cosa puntatore è necessario ricablare per fare un inserimento. Se restituisce invece un puntatore al puntatore nodo che ha finito per essere nullo, allora insertpuò essere attuata semplicemente riassegnando questo puntatore per puntare al nuovo nodo che deve essere inserito.

Solo una supposizione.

Risposto il 21/03/2011 a 05:48
fonte dall'utente

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