2011-03-21 203 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可以通过重新分配这个指针指向需要插入的新节点来实现。

只是一个猜测。

相关问题