begin process at 2012 05 28 13:31:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

arbrebinaire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

arbrebinaire

samedi 9 janvier 2010 à 11:59:01 | arbrebinaire

jbitsch68

bonjour,

j'essaye de créer un arbre binaire.

voici le code :

--- les classes noeud et arbrebinaire

Code C/C++ :
#include <iostream>

class Noeud;

class ArbreBinaire
{
      public :
             void affiche () const ; 
             void afficheRacine() const;
             ArbreBinaire(int i);
             ArbreBinaire();
             
      private :
              Noeud * racine ; 
              
};


class Noeud{

      friend class ArbreBinaire;
      
      public :
            
      private :
              int info ; 
              ArbreBinaire fg, fd ;
              Noeud(int i); 
      
};


---l'implémentation

Code C/C++ :
#include "ArbreBinaire.h"

void ArbreBinaire::affiche () const 
{
     if (racine != 0 )
     {  std::cout<<racine->info << " ";
        racine->fg.affiche();
        racine->fd.affiche();
     }
     
}

void ArbreBinaire::afficheRacine()const
{
	std::cout<<racine->info<<" est la racine de l'arbre"<<std::endl;
}

ArbreBinaire::ArbreBinaire():racine(0){}
ArbreBinaire::ArbreBinaire(int i):racine(new Noeud(i)){}
Noeud::Noeud(int i ):info(i),fg(),fd(){}


--- et le main

Code C/C++ :
#include <iostream >
#include "ArbreBinaire.h"
using namespace std ; 
int main () 
{   

   ArbreBinaire * arbre = new ArbreBinaire(5);
   
    
   arbre->afficheRacine();
   
   system("pause");
}



Le code devrai afficher 5 mais ne fait rien, je vois absolument pas pourquoi.
samedi 9 janvier 2010 à 15:09:28 | Re : arbrebinaire

CptPingu

Administrateur CodeS-SourceS

Le code devrai afficher 5 mais ne fait rien, je vois absolument pas pourquoi.


Chez moi, il affiche 5.

using namespace std;


Jamais ! Voir: [ Lien ]

Evite aussi l'utilisation de la commande "system".

ArbreBinaire * arbre = new ArbreBinaire(5);


Non seulement tu ne fais pas de delete après, mais en plus on pourrait tout à fait écrire:
Code C/C++ :
#include <iostream>
int main ()
{
  ArbreBinaire arbre(5);
  arbre.afficheRacine();

  return 0;
}


Le friend est à utiliser avec parcimonie. Ici, il ne sert pas à grand chose. Dans ta classe Racine, tu as ArbreBinaire fg, fd. Ils devraient être des pointeurs.

Bon voici une version un peu plus propre:

Code C/C++ :
#include <iostream>

class ArbreBinaire
{
private:
  struct Noeud
  {
    int _info;
    ArbreBinaire* _fg;
    ArbreBinaire* _fd;
    Noeud(int i)
      : _info(i), _fg(0), _fd(0)
    {
    }
    ~Noeud()
    {
      delete _fg;
      delete _fd;
    }
  };

public:
  ArbreBinaire();
  ArbreBinaire(int i);
  ~ArbreBinaire();
  void affiche() const;
  void afficheRacine() const;
private:
  Noeud* _racine;
};

ArbreBinaire::ArbreBinaire()
  : _racine(0)
{
}

ArbreBinaire::ArbreBinaire(int i)
  : _racine(new Noeud(i))
{
}

ArbreBinaire::~ArbreBinaire()
{
  delete _racine;
}

void ArbreBinaire::affiche() const
{
  if (_racine == 0)
    return;
  std::cout << _racine->_info << " ";
  if (_racine->_fg != 0)
    _racine->_fg->affiche();
  if (_racine->_fd != 0)
    _racine->_fd->affiche();
}

void ArbreBinaire::afficheRacine() const
{
  std::cout << _racine->_info
	    << " est la racine de l'arbre"
	    << std::endl;
}

Code C/C++ :
#include <iostream>
#include "ArbreBinaire.h"

int main ()
{
  ArbreBinaire arbre(5);
  arbre.afficheRacine();

  return 0;
}


A mon sens, on peut se passer de la classe Noeud, tous faire dans la classe ArbreBinaire, et si tu veux masquer certaines opérations, créer un proxy dessus.

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
samedi 9 janvier 2010 à 16:00:35 | Re : arbrebinaire

jbitsch68

Oui merci pour tout ces renseignements.
C'est notre prof qui implémente les arbres de cette manière..., mais je trouve ton implémentation aussi très correcte Merci.
Pour le new c'est une habitude de java, désolé.


je viens de télécharger Codeblock et la ca marche, avec dev cpp(une version beta ) cela n'a pas fonctionné.


Est ce que vous savez si un framework existe pour l'affichage graphique des arbres binaires ? ou graph ?

Merci

samedi 9 janvier 2010 à 16:14:41 | Re : arbrebinaire

CptPingu

Administrateur CodeS-SourceS

vec dev cpp(une version beta ) cela n'a pas fonctionné.


Dev-cpp n'est plus tenu à jour depuis des années :)

Est ce que vous savez si un framework existe pour l'affichage graphique des arbres binaires ? ou graph ?


Non pas vraiment. Il y a bien dotty issue de la collection d'outil graphviz, mais ça dessine un graphe en fonction d'une sortie spécifique, et je ne sais pas si c'est disponible sous Windows (Sous Linux, c'est sur).

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
samedi 9 janvier 2010 à 16:47:07 | Re : arbrebinaire

jbitsch68

Oui c'est disponible sous Windows "au pire" (au mieux) je l'aurais installé sous fedora

Il faut utiliser GVedit (beta) pour écrire le graph et dotty pour l'afficher.


merci.


Cette discussion est classée dans : code, class, void, noeud, arbrebinaire


Répondre à ce message

Sujets en rapport avec ce message

erreur code [ par ucf662 ] [code=cpp]class point{ int x,y; public: void initialiser( int x1 , int y1 ) ; void deplacer( i Pointeur vers des fonctions membres d'une classe [ par thoflo1 ] Bonjour, J'utilise une méthode d'une classe issue d'une librairie c++, qui prend un pointeur vers une fonction en argument : [code=cpp] typedef void ( Question : Variables static/méthode static/initialisation [ par Inutqen ] Bonjour à tous, j'ai besoin d'un coup de main :) J'ai un petit soucis avec un code C++, je suppose que la réponse à ma question se trouve quelque par erreur en execution [ par marooh ] bonjour, j'ai ecrit un code qui à partir d'un fichier charge les données dans un arbre binaire de recherche. ça compile et tout mais en executant ça s Problème porté d'un pointeur déclaré en local [ par Nico_35136 ] Bonjour à tous, Voila petit souci, j'ai une fonction qui a en paramètres des pointeurs de structure de type void : [code=cpp]void priority ( unsigne interface graphique mfc [ par infoYESMINE ] Salut j'ai un code c++ ( interface graphique ) qui contient un bouton "open image" et qui affiche cette image dans une nouvelle fenetre nommé "Origin IntToStr en C [ par RENTMEESTERS ] bonjour à tous, Je dois convertir un nombre entier INT en une chaîne de caractère qui devra être affichée sur un LCD (*char). J'utilise un 16F887 et [C++ .Net] richTextBox dans une class [ par F0ra ] Bonjour,Sur se forum, Médinoc ma aidé à réaliser une class en C++ .Net qui fonctionne.Maintenant, je n'arrive pas à afficher du texte avec richTextBox error: variable or field declared void sous code:block Windows C++ [ par Topnotch ] Bonjour!Je tente de construire une fonction dans une classe qui ouvre un fichier. Dans le fichier .h, le compilateur me retourne un message d'erreur c [Qt] Probleme de classe [ par DakM ] Hello1 heure a essayer de trouver une alternative, jai pas reussi!Alors, jessaye de faire creer un socket avec comme parent, ma classe mw qui est la f


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales