Warum diese Suchfunktion einen Zeiger auf einen Zeiger zurückgeben?

stimmen
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

Dies ist eine Header - Datei. Ich verstehe nicht über searchFunktion, warum ist der Rückgabetyp node**?

Editiert: hinzugefügt Suche func hier:

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;
}
Veröffentlicht am 21/03/2011 um 05:46
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Ich würde vermuten , dass die Funktion einen Zeiger auf einen Zeiger zurückgibt , so dass Ihre searchFunktion verwendet werden kann , zu implementieren insert. Wenn searchnur einen Zeiger auf einen Knoten zurückgibt und der Knoten nicht gefunden wird , dann muss man den Baum wieder gehen , um herauszufinden , was Zeiger müssen Sie verkabeln eine Insertion zu tun. Wenn es stattdessen einen Zeiger auf den Knotenzeiger zurückgibt, der null am Ende ist, dann insertkann nur durch erneutes Zuweisen dieses Zeigers implementiert werden , um den neuen Knoten zu verweisen , die eingesetzt werden muss.

Nur eine Vermutung.

Beantwortet am 21/03/2011 um 05:48
quelle vom benutzer

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