He estado leyendo el libro K & RC y tengo una pregunta .. en el 6to Capítulo sobre estructuras en la página 140-141, hay un código que se parece a esto (saqué algunas de las partes más irrelevantes)Implementación del árbol binario en la pregunta C como se encuentra en K & R
/*
the program loops through a tree looking for some word
if it finds the word itll incremenet the count by 1
if it doesnt itll add a new node
*/
struct node {
char *word;
int count;
struct node *left;
struct node *right;
}
main() {
struct node *root;
char word[1000];
root = NULL;
while(getword(word, MAXWORD) != EOF) /* getword just grabs 1 word at a time from a file of words */
if(isalpha(word[0])) /* isalpha checks to see if it is a valid word */
root = addNode(root, word);
treeprint(root); /* prints the tree */
return 0;
}
struct node *addNode(struct node *p, char *w) {
int cond;
if(p == NULL) {
p = malloc(sizeof(struct node)); /* allocates memory for the new node */
p -> word = strdup(w);
p -> count = 1;
p -> left = p -> right = NULL;
}
else if ((cond = strcmp(w, p -> word)) == 0)
p -> count++;
else if(cond < 0)
p -> left = addNode(p -> left, w);
else
p -> right = addNode(p -> right, w);
return p;
}
Y mi vergüenza está en la función main() en la raíz = addNode (raíz, palabra)
Si addNode devuelve un puntero a la recién agregado nodo (o al nodo en el que está la palabra si ya está en el árbol), ¿no "perdería" todos los datos sobre el árbol? ¿No debería quedarse como la raíz del árbol?
Gracias!
Describí la recursión un poco aquí: http://stackoverflow.com/questions/6420309/how-can-i-analyze-a-recursos-de-fuentes-recursivas-por-mano /6420521#6420521 – stacker