저는 트리 구조를 만들고 있습니다.이 트리 구조의 각 노드는 데이터 (숫자)의 링크 된 목록을 포함합니다. 이제, 내 머리 속에는 링크 된 링크들 각각이 연관되어있는 머리를 가져야한다는 것을 의미합니다. 그래서 그 안에있는 데이터에 액세스하고 반복하여 해당 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;
}
아니요. 죄송 합니다만, 현재 코드에서 작업을 수행 할 수있는 방법이 없으므로 솔루션에 대한 첫 아이디어를 고집하려고합니다. – PnP
그래, 나는'addNumber (TreeNode *, int) '부분에서 ... 무엇이 불분명한지 알려주려고했다. 꽤 많이리스트에 작용할 모든 함수를 대신에'TreeNode'에서 대신 사용할 수 있습니다. 사실상리스트입니다. 널 보병과 함께 단일 링크 된 목록을 사용하는 것 같습니다. –
@ user1048116 행운을 빕니다. –