IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Arbre binaire en C++ quelques problème dans mon code


Sujet :

C++

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut 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.

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Pour la première erreur
    Noeud* arbre = NULL; est déclaré dans le main, comme tu n'inclus que le header il ne connais pas arbre. Défini Arbre dans #include "arbreRecursif.h"

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par Suryavarman Voir le message
    Pour la première erreur
    Noeud* arbre = NULL; est déclaré dans le main, comme tu n'inclus que le header il ne connais pas arbre. Défini Arbre dans #include "arbreRecursif.h"
    Merci pour ta réponse.

    Il faut que je mette Noeud* arbre = NULL; dans le header ?

    Si je fais comme ça, j'ai encore 9 erreurs :

    Compiling...
    principal.cpp
    z:\graduat\algo\cours 2007-2008\03 12 07 récursivité\recursivite2\arbrerecursif.h(8) : error C2065: 'NULL' : undeclared identifier
    z:\graduat\algo\cours 2007-2008\03 12 07 récursivité\recursivite2\arbrerecursif.h(8) : 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
    ArbreRecursif.cpp
    z:\graduat\algo\cours 2007-2008\03 12 07 récursivité\recursivite2\arbrerecursif.h(8) : error C2065: 'NULL' : undeclared identifier
    z:\graduat\algo\cours 2007-2008\03 12 07 récursivité\recursivite2\arbrerecursif.h(8) : 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 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(9) : 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(9) : 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(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
    Error executing cl.exe.

    Recursivite2.exe - 9 error(s), 0 warning(s)
    beegees

  4. #4
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    pour le NULL bizarre . sous GCC( c'est le compilateur ) il est inclut dans windef.h

    undeclared identifier indique qu'il ne le trouve pas donc doit manquer un include pour qu'il puisse trouver NULL.

Discussions similaires

  1. [MySQL] Problème dans mon code entre une recherche mysql et en php
    Par pasbonte dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/12/2008, 14h04
  2. Problème dans mon code
    Par mrbou dans le forum ASP
    Réponses: 15
    Dernier message: 01/10/2008, 14h38
  3. Problème dans mon code
    Par curro dans le forum Débuter
    Réponses: 14
    Dernier message: 29/08/2007, 01h46
  4. Réponses: 2
    Dernier message: 03/05/2007, 09h00
  5. Réponses: 13
    Dernier message: 17/10/2006, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo