最終問題/張貼在這!我覺得我現在非常接近!鏈接列表和樹木
基本上,一棵樹,其中每個節點包含一個數字列表,其中樹按名稱排序(樹節點中包含的數據)。從本質上說,目前,我的名字已經添加到我的樹中,並且該樹的列表中給出了數字,但是我正在努力爭取每個名稱具有多個數字的能力,因此如果兩個數字相同的名字用不同的數字輸入。我有比較代碼來檢查相同的名稱,但在那個時候,我不確定如何修改我的指針,以便我添加另一個元素到我的列表中,並在那裏添加新的數字。
乾杯,任何幫助/提示/線索等我們非常感激
下面是我當前的代碼:
編輯:真正的問題是,我怎麼現在,拿我的代碼,並允許每個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
你可以把它變成一個具體的問題嗎? –