Неправильный обход дерева

У меня имеется дерево куда я закидываю события 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 на беглый взгляд сделаны правильно)

→ Ссылка