Cet exercice est basé sur l'implémentation d'un arbre binaire de recherche qui contient tous les étudiants de l'EPL. Cet arbre est ordonné suivant les noma des étudiants (l'étudiant ayant le plus petit noma se trouve donc le plus à gauche dans l'arbre). Pour chacun des étudiants, l'arbre contient en plus du noma, une donnée (le nom de l'étudiant), et la note obtenue au cours LEPL1503. Cet exercice est composé de deux parties.
Pour réaliser cet exercice, vous devez utiliser les structures suivantes:
struct element { struct element* left; struct element* right; int noma; char* name; double grade; }; struct obtree{ struct element* head; }; struct linked_node{ struct linked_node* next; int noma; char* name; double grade; }; struct linked_list{ struct linked_node* first; int nbr_of_element; };
Dans un premier temps, il vous est demandé d'écrire une fonction baptisée insert
qui, prenant comme argument un arbre, un noma,
un nom name
et une note grade
, ajoute l'étudiant (avec les données name
, noma
et grade
) dans l'arbre binaire en respectant l'ordre de ce dernier. Attention à copier le nom dans une nouvelle adresse mémoire (en appelant un malloc et en copiant la chaîne de caractères dans celle-ci)
Dans le cas où l'étudiant ajouté possède un noma qui se trouve déjà dans l'arbre, il faut mettre à jour les données relatives à ce-dernier (c'est-à-
dire modifier le nom et la note pour le noma correspondant).
Dans le cas où une erreur apparait, retournez NULL
.
Ensuite, il vous est demandé d'écrire une fonction baptisée convert
qui, prenant comme argument la racine d'un
arbre (c'est-à-dire l'élément central/le premier élément de l'arbre), convertit l'arbre binaire en une liste chainée n, dont les éléments sont
les étudiants de l'arbre, triés par ordre croissant suivant leur noma. Il peut être utile d'implémenter une sous-fonction pour réaliser cette tâche.
Le résultat de cette fonction convert est stockée sous la forme d'un paramètre de la fonction (il s'agit du deuxième paramètre), facilitant
l'implémentation dans le cas où vous appelez récursivement convert
.