Почему эта функция поиска возвращает указатель на указатель?

голоса
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

Это заголовочный файл. Я не понимаю , о searchфункции, почему возвращаемый тип node**?

Отредактировано: добавлен поиск FUNC здесь:

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;
}
Задан 21/03/2011 в 05:46
источник пользователем
На других языках...                            


1 ответов

голоса
2

Я бы предположил , что функция возвращает указатель на указатель , так что ваша searchфункция может быть использована для реализации insert. Если searchпросто возвращает указатель на узел и узел не найден, то вы должны ходить по дереву снова , чтобы выяснить , что указатель вам нужно перемонтировать сделать вставку. Если вместо этого он возвращает указатель на указатель узла , который в конечном итоге быть нулевым, то insertможет быть реализовано только переназначение этого указателя , чтобы указать на новый узел , который должен быть вставлен.

Просто догадка.

Ответил 21/03/2011 в 05:48
источник пользователем

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