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;
}