INFO607
TP-Proximity
arbre.h
Go to the documentation of this file.
1
#ifndef _ARBRE_H_
2
#define _ARBRE_H_
3
4
/* A vous de changer cela. */
5
typedef
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
*/
17
extern
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
*/
30
typedef
struct
SNoeud
{
31
Donnee
data
;
32
struct
SNoeud
*
gauche
;
33
struct
SNoeud
*
droit
;
34
}
Noeud
;
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
*/
42
typedef
Noeud
Arbre
;
43
44
45
46
/**
47
* @return l'arbre vide.
48
*/
49
extern
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
*/
56
extern
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
*/
67
extern
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
*/
84
extern
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
*/
91
extern
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
*/
99
extern
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
*/
108
extern
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
*/
116
extern
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
*/
125
extern
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
*/
135
extern
Donnee
*
Valeur
(
Noeud
* N );
136
137
138
#endif
ArbreVide
Arbre * ArbreVide()
Definition
arbre.c:24
Detruire
void Detruire(Arbre *A)
Definition
arbre.c:34
Racine
Noeud * Racine(Arbre *A)
Definition
arbre.c:92
ModifieDroit
void ModifieDroit(Noeud *N, Arbre *SD)
Definition
arbre.c:140
Creer2
Arbre * Creer2(Donnee *ptr_d, Arbre *G, Arbre *D)
Definition
arbre.c:74
Noeud
struct SNoeud Noeud
Gauche
Noeud * Gauche(Noeud *N)
Definition
arbre.c:104
Droit
Noeud * Droit(Noeud *N)
Definition
arbre.c:128
ModifieGauche
void ModifieGauche(Noeud *N, Arbre *SG)
Definition
arbre.c:116
Creer0
Arbre * Creer0(Donnee *ptr_d)
Definition
arbre.c:53
Arbre
Noeud Arbre
Definition
arbre.h:42
CopierDonnees
void CopierDonnees(Donnee *d1, Donnee *d2)
Definition
arbre.c:15
Valeur
Donnee * Valeur(Noeud *N)
Definition
arbre.c:153
Donnee
int Donnee
Definition
arbre.h:5
SNoeud
Definition
arbre.h:30
SNoeud::gauche
struct SNoeud * gauche
Definition
arbre.h:32
SNoeud::data
Donnee data
Definition
arbre.h:31
SNoeud::droit
struct SNoeud * droit
Definition
arbre.h:33
Generated by
1.9.8