我試圖按順序將節點插入樹中。我的功能很好......當只有三個節點時。C中的二叉樹
我有這樣的代碼:
typedef struct _Tnode Tnode;
struct _Tnode {
char* data;
Tnode* left;
Tnode* right;
};
隨着這樣的:
Tnode* add_tnode(Tnode* current_node, char* value) {
Tnode* ret_value;
if(current_node == NULL) {
current_node = (Tnode*) malloc(sizeof(Tnode));
if(current_node != NULL) {
(current_node)->data = value;
(current_node)->left = NULL;
(current_node)->right = NULL;
ret_value = current_node; }
else
printf("no memory");
}
else {
if(strcmp(current_node->data,value)) { //left for less than
ret_value = add_tnode((current_node->left), value);
current_node -> left = (Tnode*) malloc(sizeof(Tnode));
(current_node -> left) -> data = value;
}
else if(strcmp(current_node->data,value) > 0) {
ret_value = add_tnode((current_node -> right), value);
current_node -> right = (Tnode*) malloc(sizeof(Tnode));
(current_node -> right) -> data = value;
}
else {
printf("duplicate\n");
ret_value = current_node;
}
}
return ret_value;
}
我知道什麼是錯在這裏,我只是不知道如何解決它。這隻會覆蓋連接到根節點的兩個節點。即
|root_node|
/ \
|node_2| |node_3|
我不能添加節點四。它只是根據輸入覆蓋節點2或3。經過調試和一點研究,我不太確定該從哪裏出發......
如果有人能幫忙,我會非常感激。
作爲一個小問題,考慮使用fprintf(stderr,「no memory \ n」);而不僅僅是一個printf()。將所有錯誤消息發送到stderr而不是stdout是個好習慣,即使它更簡單。 – 2009-02-24 05:23:30
作爲另一個小點:在C中,絕不會投出malloc()的返回值。這是不需要的,並且實際上可以*隱藏真正的錯誤。此外,表單「sizeof * current_node」(no parens!)會刪除重複的類型名稱。 – unwind 2009-02-24 08:53:48