2011-03-21 198 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可以通過重新分配這個指針指向需要插入的新節點來實現。

只是一個猜測。

相關問題