¿Por qué esta función de búsqueda devuelve un puntero a un puntero?

votos
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

Este es un archivo de cabecera. Yo no entiendo de searchfunción, por eso es el tipo de retorno node**?

Editado: añadido de búsqueda func aquí:

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;
}
Publicado el 21/03/2011 a las 05:46
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
2

Yo supongo que la función devuelve un puntero a un puntero para que su searchfunción se puede utilizar para poner en práctica insert. Si searchsólo devuelve un puntero a un nodo y no se encuentra el nodo, entonces usted tiene que recorrer el árbol de nuevo para averiguar lo que necesita puntero de volver a cablear hacer una inserción. Si en su lugar devuelve un puntero al puntero del nodo que terminó siendo nula, entonces insertse puede implementar con sólo la reasignación de este puntero que apunte al nuevo nodo que debe ser insertado.

Solo una suposición.

Respondida el 21/03/2011 a las 05:48
fuente por usuario

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