Vì vậy, tôi đã đọc qua cuốn sổ RC K & và có câu hỏi .. trong Chương 6 về cấu trúc trên trang 140-141, có mã giống như thế này (tôi lấy ra một số trong những phần không liên quan nhiều hơn)Thực hiện cây nhị phân trong câu hỏi C như được tìm thấy trong 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;
}
Và sự nhầm lẫn của tôi là trong hàm main() tại gốc = addNode (root, word)
Nếu addNode trả về một con trỏ đến mới được bổ sung nút (hoặc nút mà từ đó là tại nếu nó đã int cây của mình), sẽ không phải là "mất" tất cả các dữ liệu trên cây? Không nên ở gốc như gốc của cây?
Cảm ơn!
Tôi đã mô tả đệ quy một chút tại đây: http://stackoverflow.com/questions/6420309/how-can-i-analyze-a-recursive-source-codes-by-hand/6420521#6420521 – stacker