Waarom heeft deze zoekfunctie terug een pointer naar een pointer?

stemmen
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

Dit is een header-bestand. Ik begrijp het niet over searchde functie, waarom is de return type node**?

Bewerkt: toegevoegde zoeken func hier:

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;
}
De vraag is gesteld op 21/03/2011 om 05:46
bron van user
In andere talen...                            


1 antwoorden

stemmen
2

Ik denk dat de functie een pointer naar een pointer, zodat uw searchfunctie kan worden gebruikt voor het implementeren insert. Als searchslechts een pointer naar een knooppunt en het knooppunt is niet gevonden, dan moet je de boom weer lopen om erachter te komen wat wijzer je nodig hebt om opnieuw bedraden om een insertie doen. Als het in plaats daarvan een verwijzing naar het knooppunt pointer die eindigde als null terugkeert, dan insertkan worden uitgevoerd door gewoon de overheveling van deze pointer om te wijzen op het nieuwe knooppunt die moet worden gestoken.

Gewoon een gok.

antwoordde op 21/03/2011 om 05:48
bron van user

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