最终问题/张贴在这!我觉得我现在非常接近!链接列表和树木
基本上,一棵树,其中每个节点包含一个数字列表,其中树按名称排序(树节点中包含的数据)。从本质上说,目前,我的名字已经添加到我的树中,并且该树的列表中给出了数字,但是我正在努力争取每个名称具有多个数字的能力,因此如果两个数字相同的名字用不同的数字输入。我有比较代码来检查相同的名称,但在那个时候,我不确定如何修改我的指针,以便我添加另一个元素到我的列表中,并在那里添加新的数字。
干杯,任何帮助/提示/线索等我们非常感激
下面是我当前的代码:
编辑:真正的问题是,我怎么现在,拿我的代码,并允许每个TreeNode的列表包含多个数字,当输入前一个treenode的相同名称时,将构建该名称的数字列表。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
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);
int 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);
}
N_Print(root);
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;
}
TreeNode* SearchTree(TreeNode *root, char *search) {
int comparison;
if (root == NULL) {
printf("NOT FOUND\n");
return NULL;
} else if ((comparison = stricmp(search, root->name)) == 0) {
return root;
} else if ((comparison = stricmp(search, root->name)) < 0) {
return SearchTree(root->left, search);
} else if ((comparison = stricmp(search, root->name)) > 0)
return SearchTree(root->right, search);
}
int N_Print(TreeNode *root) {
TreeNode *search_val;
char search[25];
while(1) {
printf("Type a name please: ");
scanf("%24s", search);
if (search[0] == '.')
break;
search_val = SearchTree(root, search);
if (search_val == NULL) {
N_Print(root);
}
printf("%s\n", search_val->numbers->number);
}
return 0;
}
我的第一个猜测是,我需要添加代码,需要放在我的比较,如果语句中时的结果比较== 0,从而增加了列表,并添加数量那里。但这是我卡住的地方!
这是一个功课题吗?如果是的话请重新标记。 –
是的,我会重新标记。 – PnP
你可以把它变成一个具体的问题吗? –