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 éprouvé
    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 : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    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 actif Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    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"
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

  3. #3
    Membre éprouvé
    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 : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    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 actif Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    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.
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

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