INFO607
arbre.h
Go to the documentation of this file.
1#ifndef _ARBRE_H_
2#define _ARBRE_H_
3
4/* A vous de changer cela. */
5typedef int Donnee;
6
7/**
8 * Copie une donnée dans une autre. Cette fonction est utile lorsque
9 * le type Donnee est complexe et que l'opérateur d'affectation du C
10 * ne fonctionne pas bien.
11 *
12 * @param d1 un pointeur vers la première donnée à recopier.
13 *
14 * @param d2 un pointeur vers la deuxième donnée, qui sera écrasée et
15 * prendra les valeurs de d1.
16 */
17extern void CopierDonnees( Donnee* d1, Donnee* d2 );
18
19
20/*****************************************************************************/
21/* Les arbres */
22/*****************************************************************************/
23
24/**
25 * Un noeud dans un arbre binaire contient une donnée, et
26 * éventuellement un pointeur vers un fils gauche et/ou vers un fils
27 * droit. On pourrait aussi stocker le noeud père ici, mais on ne
28 * s'en servira pas dans les algorithmes développés.
29 */
30typedef struct SNoeud {
32 struct SNoeud* gauche;
33 struct SNoeud* droit;
35
36
37/**
38 * Un arbre binaire est un noeud appelé racine. On utilisera le type
39 * Arbre lorsqu'on désignera le noeud racine et le type Noeud
40 * lorsqu'on désigne un noeud quelconque.
41 */
42typedef Noeud Arbre;
43
44
45
46/**
47 * @return l'arbre vide.
48 */
49extern Arbre* ArbreVide();
50
51/**
52 * Détruit un arbre et désalloue tous ses éléments alloués.
53 *
54 * @param A un pointeur vers un arbre valide.
55 */
56extern void Detruire( Arbre* A );
57
58/**
59 * Crée et retourne un arbre avec un seul noeud qui recopie la donnée
60 * pointée par ptr_d.
61 *
62 * @param ptr_d un pointeur vers une donnée.
63 *
64 * @return un pointeur vers l'arbre créé (ie. un pointeur vers sa
65 * racine).
66 */
67extern Arbre* Creer0( Donnee* ptr_d );
68
69/**
70 * Crée et retourne un arbre qui l'union de deux sous-arbres plus un
71 * noeud qui recopie la donnée pointée par ptr_d.
72 *
73 * @param ptr_d un pointeur vers une donnée.
74 *
75 * @param G un pointeur vers le futur sous-arbre gauche. Attention il
76 * ne faut plus s'en servir après, car il est intégré à l'arbre A.
77 *
78 * @param D un pointeur vers le futur sous-arbre droit. Attention il
79 * ne faut plus s'en servir après, car il est intégré à l'arbre A.
80 *
81 * @return un pointeur vers l'arbre créé (ie. un pointeur vers sa
82 * racine).
83 */
84extern Arbre* Creer2( Donnee* ptr_d, Arbre* G, Arbre* D );
85
86/**
87 * Retourne le noeud racine de A (éventuellement NULL si arbre vide).
88 *
89 * @param A un pointeur vers un arbre valide.
90 */
91extern Noeud* Racine( Arbre* A );
92
93/**
94 * @return le noeud fils gauche de N (éventuellement NULL si N n'avait
95 * pas de fils gauche).
96 *
97 * @param N un pointeur vers un noeud valide.
98 */
99extern Noeud* Gauche( Noeud* N );
100
101/**
102 * Modifie le noeud N de façon à ce que SG devienne sous nouveau
103 * sous-arbre gauche. L'ancien sous-arbre gauche de N est désalloué.
104 *
105 * @param N un pointeur vers un noeud valide.
106 * @param SG le nouveau sous-arbre, éventuellement vide ou réduit à un noeud.
107 */
108extern void ModifieGauche( Noeud* N, Arbre* SG );
109
110/**
111 * @return le noeud fils droit de N (éventuellement NULL si N n'avait
112 * pas de fils droit).
113 *
114 * @param N un pointeur vers un noeud valide.
115 */
116extern Noeud* Droit( Noeud* N );
117
118/**
119 * Modifie le noeud N de façon à ce que SD devienne sous nouveau
120 * sous-arbre droit. L'ancien sous-arbre droit de N est désalloué.
121 *
122 * @param N un pointeur vers un noeud valide.
123 * @param SD le nouveau sous-arbre, éventuellement vide ou réduit à un noeud.
124 */
125extern void ModifieDroit( Noeud* N, Arbre* SD );
126
127
128/**
129 * Permet la lecture et l'écriture dans la donnée associée au noeud N.
130 *
131 * @return un pointeur vers la donnee du noeud N.
132 *
133 * @param N un pointeur vers un noeud valide.
134 */
135extern Donnee* Valeur( Noeud* N );
136
137
138#endif
Arbre * ArbreVide()
Definition arbre.c:24
void Detruire(Arbre *A)
Definition arbre.c:34
Noeud * Racine(Arbre *A)
Definition arbre.c:92
void ModifieDroit(Noeud *N, Arbre *SD)
Definition arbre.c:140
Arbre * Creer2(Donnee *ptr_d, Arbre *G, Arbre *D)
Definition arbre.c:74
struct SNoeud Noeud
Noeud * Gauche(Noeud *N)
Definition arbre.c:104
Noeud * Droit(Noeud *N)
Definition arbre.c:128
void ModifieGauche(Noeud *N, Arbre *SG)
Definition arbre.c:116
Arbre * Creer0(Donnee *ptr_d)
Definition arbre.c:53
Noeud Arbre
Definition arbre.h:42
void CopierDonnees(Donnee *d1, Donnee *d2)
Definition arbre.c:15
Donnee * Valeur(Noeud *N)
Definition arbre.c:153
int Donnee
Definition arbre.h:5
Definition arbre.h:30
struct SNoeud * gauche
Definition arbre.h:32
Donnee data
Definition arbre.h:31
struct SNoeud * droit
Definition arbre.h:33