#ifndef _BST_H_ /* Returns negative (leftright). */ 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**
возвращаемого типа node**
?
Отредактировано: добавлено search func here:
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 left; else if (compare_result > 0) node = &(*node)->right; else break; } return node; }
Я бы предположил, что функция возвращает указатель на указатель, так что ваша функция search
может использоваться для реализации insert
. Если search
просто возвращает указатель на узел, а узел не найден, вам нужно снова пройти дерево, чтобы выяснить, какой указатель вам нужно переделать, чтобы сделать вставку. Если вместо этого он возвращает указатель на указатель узла, который в конечном итоге равен нулю, тогда insert
может быть реализована путем просто переназначения этого указателя, чтобы указать на новый узел, который необходимо вставить.
Просто предположение.