我创建了一个树结构,树结构的每个节点都包含数据(数字)的链接列表。现在,在我的脑海中,这意味着,每个链接链接显然都需要有一个与它们关联的头部,以便我可以访问其中的数据并循环显示该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有没有运气? –