Dlaczego ta funkcja wyszukiwania zwracają wskaźnik do wskaźnika?

głosy
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

Ten plik jest nagłówek. Nie rozumiem o searchfunkcji, dlatego jest zwracany typ node**?

Zmieniano: dodany wyszukiwarki func tutaj:

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;
}
Utwórz 21/03/2011 o 05:46
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
2

Przypuszczam, że funkcja zwraca wskaźnik do wskaźnika tak, że searchfunkcja może być używana do wdrożenia insert. Jeśli searchtylko zwraca wskaźnik do węzła, a węzeł nie zostanie znaleziony, to trzeba iść na drzewo ponownie, aby dowiedzieć się, co wyżeł trzeba rewire zrobić wstawkę. Jeśli zamiast tego zwraca wskaźnik do wskaźnika węzła, który okazał się być null, następnieinsert mogą być realizowane tylko przez realokacja ten wskaźnik, aby wskazać nowy węzeł, który musi być włożona.

Tylko domyślać.

Odpowiedział 21/03/2011 o 05:48
źródło użytkownik

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