Așa că am citit prin carte K & R C și au o întrebare .. în al 6-lea la capitolul structs la pagina 140-141, există un cod care arata ca acest lucru (am luat unele dintre părțile mai irelevante)
/*
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;
}
Și confuzia mea este în funcția principală () la rădăcină = addNode (rădăcină, cuvânt)
Dacă addNode returnează un pointer la nodul nou adăugat (sau la nodul care cuvântul este în cazul în care sa int deja el copac), nu ar că „pierde“ toate datele de mai sus copac? Nu ar trebui să rădăcină ședere ca rădăcină de copac?
Mulțumiri!













