[C++] implémention d'un arbre binaire

Résolu
mina15 Messages postés 8 Statut Membre -  
 ccc -
Bonjour tout le monde
Pourriez vous m'aidez à implémenter un arbre binaire en C++ svp.
Merci d'avance.
A bientot.

3 réponses

  1. loulou2008 Messages postés 21 Statut Membre 15
     
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct noeud * tree;
    struct noeud
    {int val;
    tree fg,fd;
    };
    tree cree_noeud(int val)
    {
    tree a;
    a=(tree)malloc(sizeof(noeud));
    if(!a)
    {printf("pas d espace");
    return(NULL);
    }
    if(a)
    {
    a->fd=NULL;
    a->fg=NULL;
    a->val=val;
    printf("%d",a->val);
    return(a);
    }
    }
    tree ajout(tree b,tree a,tree r)
    {a=r;
    if(a==NULL)
    {
    return b;
    }
    else
    {
    if(b->val<a->val)
    {
    if(a->fd==NULL)
    {
    a->fd=b;
    printf("%d",a->val);
    return(r);
    }
    else
    {
    r=ajout(b,a->fd,r);
    return(r);
    }
    }
    else
    {
    if(a->fg==NULL)
    {
    a->fg=b;
    printf("%d",a->val);
    return r;
    }
    else
    {
    r=ajout(b,a->fg,r);
    return(r);
    }
    }
    }
    }
    void prefixe(tree a)
    {
    if(a!=NULL)
    {
    printf("%d ",a->val);
    prefixe(a->fg);
    prefixe(a->fd);
    }
    }

    void main()
    {int x,l,h;
    tree r=NULL,b=NULL,k=NULL,a=NULL;free(r);
    printf("donner un entier : \n" );
    scanf("%d",&x);
    b=cree_noeud(x);
    r=ajout( b,a, r);
    printf("%d",r->val);
    flushall();
    printf("donner un entier : \n");
    scanf("%d",&x);
    b=cree_noeud(x);
    r=ajout( b,a, r);

    prefixe(r);
    }
    15
    1. rom1504
       
      C'est du C
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Je signale juste que du C++ c'est jamais que du C enrichi. Alors effectivement tu peux faire des classes, des héritages, des templates (ou encore mieux, du boost) si ça t'amuse, mais en soit ça ne change pas grand chose.
    1
    1. rom1504
       
      Non le c++ et le c sont deux langages bien différents maintenant et ici c'est bien du C vu l'utilisation de malloc, pas d'utilisation des classes alors que ça serait plus adapté en c++, utilisation de printf ( au lieu de cout en c++ ) et inclusion de stdio.h et stdlib.h.
      On peut bien compiler du c facilement avec un compilateur fait pour le c++ mais ça ne deviens pas pour autant du c++...
      0
    2. ccc
       
      au contraire ça change tous
      0
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Sans vouloir te faire de peine toutes les fonctions "C" sont accessibles via des headers genre <cstdio>, <cassert>, etc... Du coup est ce que le code n'en devient plus du C ou pas moins du C++ :p

    En soi, ça n'apporte rien de vouloir coder "C++" like si tu peux le faire aussi facilement en C. Ici le seul intérêt du C++ pourrait être l'utilisation de template pour faire un arbre générique mais c'est à peu près tout ce qui est à gagner. En particulier certaines fonctions genre fscanf (pour parser un fichier) sont plus pratique qu'un std::ifstream et >>. Soit tu utilises de la lib pcre, soit au final tu utilises <cstdio> et fscanf. Toute cette dissertation pour dire qu'à mon avis dans ce cas précis ça n'a pas des masses d'importance.

    Ceci dit, si tu es chaud pour faire une solution C++ n'hésite pas ;-)

    Bonne chance
    0