2011-03-21 18 views
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; 
} 

答えて

2

私はあなたのsearch機能がinsertを実装するために使用することができるように機能がポインタへのポインタを返すことを推測します。 searchがノードへのポインタを返すだけで、ノードが見つからない場合、ツリーを再び歩かなければ、挿入を行うためにどのようなポインタを再配線する必要があるのか​​分かりません。その代わりにヌルになったノード・ポインタへのポインタを戻す場合、このポインタを挿入する必要のある新しいノードを指すように再割り当てするだけで、insertを実装できます。

まあまあです。

関連する問題