Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ARBRE QUELCONQUE


Information sur la source

Catégorie :Application Classé sous : arbre Niveau : Débutant Date de création : 03/03/2006 Date de mise à jour : 08/03/2006 08:14:38 Vu : 3 661

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Bien tout simplement ce code permet la création d'un arbre qulconque avec un nombre maximum de 3fils. Ensuite il calcule la somme des tous les noeuds
 

Source

  • /*************************************Arbre Binaire**********************************************/
  • #include<stdio.h>
  • #include<conio.h>
  • #include<malloc.h>
  • struct noeud
  • { int val ;
  • noeud *fg ;
  • noeud *fd ;
  • } ;
  • typedef noeud* arbre ;
  • //***********************************************************
  • arbre inserer ( arbre T , int e )
  • { noeud *P ;
  • if ( T == NULL )
  • { P = (noeud*) malloc (sizeof(noeud)) ;
  • P->val = e ;
  • P->fg = NULL ;
  • P->fd = NULL ;
  • T = P ;
  • }
  • else
  • { if (T->val < e)
  • T->fd = inserer (T->fd , e) ;
  • else
  • T->fg = inserer (T->fg , e) ;
  • }
  • return(T) ;
  • }
  • //************************************************************
  • void affiche ( arbre T )
  • { if (T!= NULL)
  • { affiche(T->fg) ;
  • printf(" %d",T->val) ;
  • affiche(T->fd) ;
  • }
  • }
  • //*************************************************************
  • arbre creation()
  • {
  • arbre A=NULL;int Num;
  • printf(" Donner les numeros <Taper 0 pour terminer> : \n" ) ;
  • printf(" * Le 1ere numero: " ) ;
  • scanf("%d",&Num) ;
  • while ( Num != 0 )
  • { A = inserer(A,Num) ;
  • printf(" * element suivant : " ) ;
  • scanf("%d",&Num) ;
  • }
  • return A;
  • }
  • //*************************************************************
  • int somme(arbre A)
  • {int s=0;
  • if(A!=0)
  • {
  • s=A->val+somme(A->fd)+somme(A->fg);//appel recursive
  • }
  • return s;
  • }
  • void liberer(arbre T)
  • { noeud *G , *D ;
  • if (T!=NULL)
  • { G = T->fg ;
  • D = T->fd ;
  • free (T) ;
  • liberer(G) ;
  • liberer(D) ;
  • }
  • }
  • //*****************************************************************
  • void main()
  • { arbre A=NULL ;
  • int Num , s,choix ;
  • A=creation();
  • do
  • { printf("\n\n ****************************************************************** " ) ;
  • printf("\n 0 = Quitter " ) ;
  • printf("\n 1 = Ajouter " ) ;
  • printf("\n 2 = Afficher " ) ;
  • printf("\n 3 = Somme des Noeuds ");
  • printf("\n Donner votre choix : " ) ;
  • scanf("%d",&choix) ;
  • switch (choix)
  • {
  • case 0 :
  • printf("\n \t***...END...*** " ) ;
  • break ;
  • case 1 :
  • printf("\n Donner l'entier à ajouter : " ) ;
  • scanf("%d",&Num) ;
  • A = inserer(A,Num) ;
  • printf(" L'entier a été ajouter. " ) ;
  • break ;
  • case 2 :
  • printf("\n L'arbre est : " ) ;
  • affiche(A) ;
  • break ;
  • case 3:
  • {s=somme(A);printf("somme =%d",s);
  • break;
  • }
  • default :
  • printf("\n Le choix est incorrecte. " ) ;
  • break ;
  • }
  • }
  • while ( choix != 0 ) ;
  • liberer(A) ;
  • getch();
  • }
/*************************************Arbre Binaire**********************************************/

#include<stdio.h>
#include<conio.h>
#include<malloc.h>

struct noeud
{  int val ;
   noeud *fg ;
   noeud *fd ;
} ;
typedef noeud* arbre ;
//***********************************************************
arbre inserer ( arbre T , int e )
{  noeud *P ;
   if ( T == NULL )
   { P = (noeud*) malloc (sizeof(noeud)) ;
     P->val = e ;
     P->fg = NULL ;
     P->fd = NULL ;
     T = P ;
   }
   else
   { if (T->val < e)
	   T->fd = inserer (T->fd , e) ;
     else
	   T->fg = inserer (T->fg , e) ;
   }
   return(T) ;
}
//************************************************************
void affiche ( arbre T )
{ if (T!= NULL)
  {  affiche(T->fg) ;
     printf("  %d",T->val) ;
     affiche(T->fd) ;
  }
}
//*************************************************************
arbre creation()
{
	arbre A=NULL;int Num;
	printf(" Donner les numeros <Taper 0 pour terminer> : \n" ) ;
	printf(" * Le 1ere numero: " ) ;
	scanf("%d",&Num) ;
  while ( Num != 0 )
  { A = inserer(A,Num) ;
    printf(" * element suivant : " ) ;
    scanf("%d",&Num) ;

  }
  return A;
}
//*************************************************************
int somme(arbre A)
{int s=0;
if(A!=0)
{
s=A->val+somme(A->fd)+somme(A->fg);//appel recursive 
}
return s;
}


void liberer(arbre T)
{  noeud *G , *D ;
   if (T!=NULL)
   { G = T->fg ;
     D = T->fd ;
     free (T) ;
     liberer(G) ;
     liberer(D) ;
   }
}

//*****************************************************************
void main()
{ arbre A=NULL ;
  int Num  , s,choix ;
  A=creation();
  do
  { printf("\n\n ****************************************************************** " ) ;
    printf("\n 0 = Quitter " ) ;
	 printf("\n 1 = Ajouter " ) ;
	 printf("\n 2 = Afficher " ) ;
         printf("\n 3 = Somme des Noeuds ");
    
    printf("\n Donner votre choix : " ) ;
    scanf("%d",&choix) ;
    switch (choix)
    {
       case 0 :  
                 printf("\n \t***...END...*** " ) ;
		    break ;

       case 1 : 
                 printf("\n Donner l'entier à ajouter : " ) ;
		           scanf("%d",&Num) ;
                 
                  A = inserer(A,Num) ;
				         printf(" L'entier a été ajouter. " ) ;
                  
			 break ;

	    case 2 :  
                 printf("\n    L'arbre est : " ) ;
		           affiche(A) ;
          break ;
              case 3: 
                     {s=somme(A);printf("somme =%d",s);
break;

}
      
       default : 
                 printf("\n  Le choix est incorrecte. " ) ;
		    break ;
    }
  }
  while ( choix != 0 ) ;

  liberer(A) ;
  getch();
}

Historique

08 mars 2006 08:14:38 :
j'ai corrigé la fonction somme qui doit retourner un int

Commentaires et avis

signaler à un administrateur
Commentaire de AlexMAN le 03/03/2006 16:27:15

//*************************************************************
void somme(Arbre A)
{int s=0;
if(A!=0)
{
s=A->val+somme(A->fd)+somme(A->fg);//appel recursive
}
printf("somme des noeud = %d", s);
}

Ta fonction somme ne renvoie rien (void somme(..)), ce n'est pas possible qu'elle fonctionne la !

int somme(Arbre A)
{
int s = 0;

if(A != 0) {
s = A->val + somme(A->fd) + somme(A->fg);
}

return s;
}

Je crois que tu n'as mm pas pris la peine de compiler ta source (cf void somme(Arbre A) a la place de arbre A).

signaler à un administrateur
Commentaire de luhtor le 03/03/2006 16:55:02

C'est normal que sa fonction ne renvoie rien, puisqu'elle affiche le résultat. Mais de tout facon, une fonction qui affiche quelque chose est a bannir totalement et faut bien sur préférer la deuxième version proposée par Alexman.

signaler à un administrateur
Commentaire de ncoder le 03/03/2006 19:22:22

LUHTOR ==> Pourquoi une fonction qui affiche quelque chose est a bannir totalment ?

AlexMAN ==> Où est le pb que ça fonction ne renvoie rien ?
Je fais plein de fonctions : void ... (int) !!!
Et yas pas de pb... ?

Thx

signaler à un administrateur
Commentaire de AlexMAN le 03/03/2006 19:31:34

void somme(Arbre A)
{int s=0;
if(A!=0)
{
s=A->val+somme(A->fd)+somme(A->fg);//appel recursive
}
printf("somme des noeud = %d", s);
}

Faut bien relire la fonction, Haykel se sert de ce que renvoie la fonction somme, or elle ne renvoie rien, il y a donc bien une couille (pardon :$).

signaler à un administrateur
Commentaire de ncoder le 03/03/2006 20:50:29

Ah ok j'avais pas regardé le code juste le commentaire merci

signaler à un administrateur
Commentaire de Haykel2006 le 04/03/2006 09:39:58

Merci pour tous vos commantaires, et merci pour les corrections, c'est vraie qu'il y  quelques fautes, mais j'ai laissé une mauvaise copie du code source, (FAUTE DE COPIER COLLER)

signaler à un administrateur
Commentaire de nejmd le 22/11/2008 16:04:19

hey est ce que qqun peutm aider a reussir l insertion dans un arbre equilibré

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

créer un arbre à partir d'un fichier word [ par yeager ] Bonjour je suis nouveau et débutant en langage CJe souhaite pouvoir lire un fichier word comportant des informations sur plusieurs livres. A partir de Construction d'un arbre à partir d'une chaine de caractères [ par dahlsimus ] Bonjour, Je souhaite construire un arbre représentant une expression booléenne saisie sous le forme d'une chaîne de caractère (ex: (a+b).C avec + OR e [MFC] Utilisation de la classe CTreeCtrl, niveau dans l'arbre [ par karine3884 ] Bonjour, Je programme sous Visual Studio C++ 6.0. J'utilise un CtreeCtrl pour créer un arbre (une arborescence). J'aimerai ajouter un item au même ni Arbre de Huffman: y'a t-il qq1 pour me corriger?? [ par danje ] Bonjour, Voilà, je viens de faire un arbre de Huffman suivant un tableau de fréquence de répétition de caractère. Mais je crois que mona rbre est faux Problem de 'left operand must be a lvalue" [ par Orezza ] Voila je vous mets le code qui est un code trouver sur ce site mais que j'ai modifié. je ne comprends pas les erreurs de compilations pourriez-vous ra supprimer un mot d'un arbre en C [ par toto000 ] Bonjour, J'ai un arbre ternaire de recherche et je voudrai supprimer un mot dans cet arbre.Voilà ce que j'ai fais mais ça ne marche pas pour tous les Recherce par préfixe [ par toto000 ] Bonjour, J'ai un arbre ternaire de recherche (un dictionnaire) et je voudrai rechercher tous les mots commencants par une certaine expression.Je pense arbre BSP [ par Zyvon ] Je suis en train de coder la gestion d'un niveau avec un arbre bsp et je n'arrive pas à coder une fonctions.Face decoupeface (Face f, const facePrinci arbre bsp [ par Zyvon ] Voila j'ai deja poser ma question sous le graphismemais comme seul Neodante (merci à lui) m'a repondu sans m'aider j'essaye ici...Je suis en train de error LNK2005 que faire ? vite je v me pendre !!!! [ par Milhouse57 ] Voila alors je debute en C++, et je dois faire un projet avec un arbre binaire !! (visual C++ 6.0)Le probleme c que lorsque je build, j'ai toutes les


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 1,186 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.