我創建了一個樹結構,樹結構的每個節點都包含數據(數字)的鏈接列表。現在,在我的腦海中,這意味着,每個鏈接鏈接顯然都需要有一個與它們關聯的頭部,以便我可以訪問其中的數據並循環顯示該TreeNode的所有數字。問題是,我撞到了一堵磚牆,真的不知道從現在的哪個地方採取了什麼步驟(見下文)。我需要爲每個鏈表返回一個頭,每個TreeNode我都不確定。將鏈接列表集成到樹結構中
以下是我迄今爲止的代碼,此時它將名稱添加到節點,並將一個數字添加到列表中,但將多個數字添加到列表中,但我不確定步驟下一步,然後如何返回一個項目以允許我的(及時)打印功能循環。
typedef struct ListNode {
char *number;
struct ListNode *next;
}ListNode;
typedef struct TreeNode {
char *name;
ListNode *numbers;
struct TreeNode *left;
struct TreeNode *right;
}TreeNode;
TreeNode* AddNode(TreeNode *, char *, char *);
TreeNode* SearchTree(TreeNode *root, char *search);
void N_Print(TreeNode *root);
int main(void) {
char my_string[50], name[25], number[25];
TreeNode *root = NULL;
while ((fgets(my_string, 50, stdin)) != NULL) {
if (my_string[0] == '.')
break;
sscanf(my_string, "%s %s", name, number);
root = AddNode(root, name, number);
}
return 0;
}
TreeNode* AddNode(TreeNode *root, char *name, char *number) {
int comparison;
if (root == NULL) {
root = (TreeNode *)malloc(sizeof(TreeNode));
root->numbers = (ListNode *)malloc(sizeof(ListNode));
root->name = strdup(name); root->numbers->number = strdup(number);
root->left = root->right = NULL;
root->numbers->next = NULL;
}else if ((comparison = strcmp(name, root->name)) < 0)
root->left = AddNode(root->left, name, number);
else if (comparison > 0) {
root->right = AddNode(root->right, name, number);
} else if (comparison == 0) {
root->numbers->number = strdup(number);
root->numbers->next = NULL;
}
return root;
}
不可以,我只能用C.對不起,但是沒有辦法,我不能從當前的代碼工作,我喜歡嘗試堅持我的解決方案的第一個想法。 – PnP
是的,我試圖用'addNumber(TreeNode *,int)'部分來說......讓我知道什麼是不清楚的。相當多的添加所有可以在列表上工作的功能,而不是TreeNode,這實際上是您的列表。它看起來像你正在使用一個空哨兵單鏈表,對嗎? –
@ user1048116有沒有運氣? –