Pourquoi cette fonction de recherche renvoie un pointeur vers un pointeur?

voix
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

Ce fichier d' en- tête. Je ne comprends pas la searchfonction, pourquoi est le type de retour node**?

Sous la direction: ajout d'une recherche func ici:

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;
}
Créé 21/03/2011 à 05:46
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

Je suppose que la fonction retourne un pointeur vers un pointeur afin que votre searchfonction peut être utilisée pour mettre en œuvre insert. Si searchjuste renvoie un pointeur vers un noeud et le noeud ne se trouve pas, alors vous devez marcher à nouveau l'arbre pour comprendre ce pointeur que vous devez recâbler pour faire une insertion. Si elle retourne à la place un pointeur vers le pointeur de noeud qui a fini par être nul, alors insertpeut être mis en œuvre par tout réaffectant ce pointeur pour pointer vers le nouveau nœud qui doit être inséré.

Juste une supposition.

Créé 21/03/2011 à 05:48
source utilisateur

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