De ce această funcție de căutare returnează un pointer la un pointer?

voturi
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

Acesta este un fișier antet. Nu înțeleg despre searchfuncția, de ce este tipul de întoarcere node**?

Editat: a adăugat căutare FUNC aici:

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;
}
Întrebat 21/03/2011 la 05:46
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
2

Mi - ar ghici că funcția returnează un pointer la un pointer , astfel încât dvs. searchfuncție poate fi utilizată pentru a pune în aplicare insert. În cazul în care searchdoar returnează un pointer la un nod și nodul nu este găsit, atunci trebuie să meargă copac din nou pentru a da seama ce pointer trebuie să rewire pentru a face o inserție. Dacă se returnează în schimb un pointer la indicatorul nodului care a ajuns să fie nul, atunci insertpoate fi pusă în aplicare doar prin reassigning acest indicator pentru a indica spre noul nod care trebuie să fie introdusă.

Doar o presupunere.

Publicat 21/03/2011 la 05:48
sursa de către utilizator

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