Как реализовать бинарное дерево в Си

Тут я положил студентов в стек, теперь нужно вместо стека использовать дерево. Я знаю теорию бинарного дерево, но в коде реализовать не могу. Знаю только что есть левый узел struct student* left; и правый struct student* right. И вообще я не понимаю как можно студентов сравнивать кто больше кто меньше, или это от размера зависит?

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>


typedef struct student {
    char LastName[50];
    char FirstName[50];
    char gender;
    int age;
    char group[8];
    int mathGrade;
    int physicsGrade;
    int chemistryGrade;
    struct student* left;
    struct student* right;
} stud;


stud* push(stud* top, const char* LastName, const char* FirstName, const char* gender, int age, const char* group, int mathGrade, int physicsGrade, int chemistryGrade ) {
    stud* ptr = malloc(sizeof(stud));
    if (ptr != NULL)
      {
         strcpy(ptr->LastName, LastName);
         strcpy(ptr->FirstName, FirstName);
         ptr->gender = gender;
         ptr->age = age;
         strcpy(ptr->group, group);
         ptr->mathGrade = mathGrade;
         ptr->physicsGrade = physicsGrade;
         ptr->chemistryGrade = chemistryGrade;
         ptr->next = top;
      }

      return ptr;

}


void show(const stud* top)
{
    const stud* current = top;
    while(current != NULL){
        printf("Фамилия: %s\n", current->LastName);
        printf("Имя: %s\n", current->FirstName);
        printf("Пол: %c\n", current->gender);
        printf("Возраст: %d\n", current->age);
        printf("Группа: %s\n", current->group);
        printf("Оценка по математике: %d\n", current->mathGrade);
        printf("Оценка по физике: %d\n", current->physicsGrade);
        printf("Оценка по химии: %d\n", current->chemistryGrade);
        printf("\n");
        current = current->next;
    }
}


void GoodJobMan(const stud* top, const char* group) {
    const stud* current = top;
    while(current != NULL) {
        if(strcmp(current->group, group) == 0 && current->mathGrade == 5 && current->physicsGrade == 5 && current->chemistryGrade == 5) {
            printf("|ВЫВОД ОТЛИЧНИКА|\n");
            printf("Фамилия: %s\n", current->LastName);
            printf("Имя: %s\n", current->FirstName);
            printf("Пол: %c\n", current->gender);
            printf("Возраст: %d\n", current->age);
            printf("Группа: %s\n", current->group);
            printf("Оценка по математике: %d\n", current->mathGrade);
            printf("Оценка по физике: %d\n", current->physicsGrade);
            printf("Оценка по химии: %d\n", current->chemistryGrade);
            printf("\n");
        }
        current = current->next;
    }
}



int main() {
    setlocale(LC_ALL, "RUS");

    stud* top = NULL;

    top = push(top, "Иванов", "Иван", 'м', 17, "ИСП-204", 5, 5, 4);
    top = push(top, "Максимов", "Максим", 'м', 16, "ИСП-204", 5, 5, 5);
    top = push(top, "Егоров", "Егор", 'м', 15, "ИСП-205", 5, 3, 4);
    top = push(top, "Наталиев", "Натали", 'ж', 18, "ИСП-205", 3, 2, 4);

    show(top);



    GoodJobMan(top, "ИСП-204");


    return 0;
}


Ответы (0 шт):