Proč tato funkce vyhledávání vrací ukazatel na ukazatel?

hlasů
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

Jedná se o soubor záhlaví. Nechápu, o searchfunkci, proč je návratový typ node**?

Upraveno: přidáno vyhledávání FUNC zde:

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;
}
Položena 21/03/2011 v 05:46
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
2

Řekl bych, že funkce vrací ukazatel na ukazatel tak, aby vaše searchfunkce může být použita k realizaci insert. Pokud searchprávě vrací ukazatel do uzlu a uzel není nalezen, pak budete muset znovu projít strom přijít na to, co ukazatel je třeba přepojit udělat inzerci. Je-li místo toho vrátí ukazatel na uzel ukazatel, který skončil být null, pak insertmohou být realizovány jen přeřazením tohoto ukazatele, aby odkazovaly na nový uzel, který je třeba vložit.

Jen odhad.

Odpovězeno 21/03/2011 v 05:48
zdroj uživatelem

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