Arbre binaire en C++ quelques problème dans mon code
Bonjour tout le monde,
J'ai récupéré un code sur internet pour tester les arbres binaires.
J'ai fais un copier/coller, j'ai crée le fichier header et deux fichiers cpp mais j'ai des erreurs que je ne comprends pas.
Citation:
ArbreRecursif.cpp
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(5) : error C2065: 'arbre' : undeclared identifier
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(5) : error C2440: 'initializing' : cannot convert from 'int' to 'struct Noeud *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(6) : error C2065: 'NULL' : undeclared identifier
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(6) : error C2440: 'initializing' : cannot convert from 'int' to 'struct Noeud *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(11) : error C2440: '=' : cannot convert from 'struct Noeud *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(40) : error C2440: '=' : cannot convert from 'int' to 'struct Noeud *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(41) : error C2440: '=' : cannot convert from 'int' to 'struct Noeud *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(49) : error C2440: 'initializing' : cannot convert from 'int' to 'struct Noeud *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(67) : error C2440: 'initializing' : cannot convert from 'int' to 'struct Noeud *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(70) : error C2446: '==' : no conversion from 'int' to 'struct Noeud *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(70) : error C2040: '==' : 'struct Noeud *' differs in levels of indirection from 'int'
Z:\Graduat\Algo\Cours 2007-2008\03 12 07 Récursivité\Recursivite2\ArbreRecursif.cpp(72) : error C2440: '=' : cannot convert from 'struct Noeud *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Error executing cl.exe.
Recursivite2.exe - 12 error(s), 0 warning(s)
Voici le code du fichier header :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| struct Noeud
{
int valeur;
Noeud* fils_droite;
Noeud* fils_gauche;
};
void Placer(Noeud* noeud);
void Ajouter(int valeur);
Noeud* Rechercher(int valeur);
void Supprimer(Noeud* noeud); |
Voici le main :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include "arbreRecursif.h"
#include <iostream>
Noeud* arbre = NULL;
void Afficher(Noeud* racine);
int main(void)
{
Ajouter(10);
Ajouter(4);
Ajouter(15);
Ajouter(2);
Ajouter(16);
Ajouter(1);
Ajouter(9);
Ajouter(14);
Afficher(arbre);
Noeud* n = Rechercher(4);
Supprimer(n);
Afficher(arbre);
return 0;
}
void Afficher(Noeud* racine)
{
if(racine->fils_gauche) Afficher(racine->fils_gauche);
std::cout << racine->valeur << std::endl;
if(racine->fils_droite) Afficher(racine->fils_droite);
} |
et voici le fichier qui pose problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| #include "arbreRecursif.h"
void Placer(Noeud* noeud)
{
Noeud* courant = arbre;
Noeud* precedent = NULL;
// Si l'arbre est vide, ça va très vite :
if(arbre == NULL)
{
arbre = noeud;
return;
}
// On se fraye un chemin jusqu'a une place vide
while(courant)
{
precedent = courant;
if(noeud->valeur < courant->valeur)
courant = courant->fils_gauche;
else
courant = courant->fils_droite;
}
// Hop, on a trouvé une place libre, et
// precedent pointe vers le parent de notre
// noeud à replacer.
if(noeud->valeur < precedent->valeur)
precedent->fils_gauche = noeud;
else
precedent->fils_droite = noeud;
}
void Ajouter(int valeur)
{
// Création de notre nouveau noeud en mémoire
Noeud* nouveau = new Noeud;
nouveau->valeur = valeur;
nouveau->fils_droite = NULL;
nouveau->fils_gauche = NULL;
// Puis on laisse Placer() le mettre à la bonne place
Placer(nouveau);
}
Noeud* Rechercher(int valeur)
{
Noeud* courant = arbre;
while(courant)
{
if(valeur == courant->valeur)
return courant;
else if(valeur < courant->valeur)
courant = courant->fils_gauche;
else
courant = courant->fils_droite;
}
return NULL;
}
void Supprimer(Noeud* noeud)
{
Noeud* droite = noeud->fils_droite;
Noeud* gauche = noeud->fils_gauche;
Noeud* courant = arbre;
// Cas délicat : si on supprime la racine?
if(noeud == arbre)
{
arbre = droite;
if(gauche) Placer(gauche);
delete noeud;
return;
}
while(courant)
{
if(courant->fils_droite == noeud
|| courant->fils_gauche == noeud)
break;
if(noeud->valeur >= courant->valeur)
courant = courant->fils_droite;
else
courant = courant->fils_gauche;
}
// Courant pointe maintenant vers le noeud précédent le
// noeud à supprimer.
if(courant->fils_droite == noeud)
courant->fils_droite = droite;
else
courant->fils_gauche = droite;
// Et puis on replace l'autre fils du noeud disparu
if(gauche) Placer(gauche);
// Enfin, on libère l'objet noeud de ses obligations
delete noeud;
} |
Etant débutant en C++, je suis sûr que vous trouverez plus vite que moi les réponses à ces problèmes.
Je vous en remercie d'avance.
beegees