Neden bu arama işlevi bir işaretçi için bir işaretçi döndürür geliyor?

oy
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

Bu bir başlık dosyasıdır. Ben yaklaşık anlamıyorum searchfonksiyonu, neden dönüş türüdür node**?

Düzenlendi: Burada arama fonk ekledi:

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;
}
Oluştur 21/03/2011 saat 05:46
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
2

Ben senin böylece işlev bir işaretçi bir işaretçi döndürür olduğunu tahmin ediyorum searchişlevi uygulamak için kullanılabilir insert. Eğer searchsadece bir düğüme bir işaretçi döndürür ve düğüm bulunmazsa, o zaman bir ekleme yapmak rewire gerek işaretçisi anlamaya tekrar ağacı yürümek zorunda. Bunun yerine boş olarak sona erdi düğüm işaretçi bir gösterici ile döner, daha sonra insertsadece takılı gereken yeni bir düğüm işaret etmek için bu işaretçi yeniden atama ile gerçekleştirilebilir.

Sadece bir tahmin.

Cevap 21/03/2011 saat 05:48
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more