Неправильный обход дерева
У меня имеется дерево куда я закидываю события events с важностью importance. А дальше при обходе дерева они должны выводиться по возрастанию, но на самом деле отображаются не по порядку.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
#include <conio.h>
typedef struct {
char priority[4];
} Event;
typedef struct treeNode {
Event event;
struct treeNode* left;
struct treeNode* right;
} TreeNode;
TreeNode* root_priority = NULL;
void mainmenu();
TreeNode* createNode(Event event) {
TreeNode* newNode = (TreeNode*)malloc(1000 * sizeof(TreeNode));
newNode->event = event;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
TreeNode* insertNodeForPriority(TreeNode* root, Event event) {
if (root == NULL) {
return createNode(event);
}
if (strcmp(event.priority, root->event.priority) < 0) {
root->left = insertNodeForPriority(root->left, event);
}
else if (strcmp(event.priority, root->event.priority) > 0) {
root->right = insertNodeForPriority(root->right, event);
}
return root;
}
void inOrderTraversal(TreeNode* node) {
if (node == NULL) {
return;
}
// Обход левого поддерева
inOrderTraversal(node->left);
// Вывод текущего узла
printf("Importance: %s\n", node->event.priority);
printf("\n");
// Обход правого поддерева
inOrderTraversal(node->right);
}
void addEvent() {
Event tmp;
printf("Enter the importance\n");
printf("-> ");
getchar();
gets_s(&tmp.priority, 10);
root_priority = insertNodeForPriority(root_priority, tmp);
mainmenu();
}
void mainmenu() {
printf("--------Notebook--------\n");
printf("1. Add event\n");
printf("2. Sort by date\n");
printf("-> ");
char tmp[2];
scanf("%s", &tmp);
switch (tmp[0] - 48) {
case 1:
addEvent();
break;
case 2:
if (root_priority == NULL) {
printf("There are no any events\n\n\n");
mainmenu();
}
else {
printf("\n");
inOrderTraversal(root_priority);
mainmenu();
}
break;
}
}
int main() {
mainmenu();
return 0;
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Похоже, у вас корень каждый раз меняется:
root_priority = insertNodeForPriority(root_priority, tmp);
А должен в первый раз быть создан, а потом каждая новая вставка с него стартует
(обход и insertNodeForPriority на беглый взгляд сделаны правильно)