|
|
|
|
Configuration: Windows XP Firefox 2.0.0.14
|
Qu'est-ce que vous appelez implémenter un ABR par tableau ?
La solution généralement employée est de partir de la racine en premier élément du tableau, et de ranger chaque fils plus loin, à savoir pour une racine i donnée, son fils gauche et droit seront respectivement à l'indice 2i et 2i+1... Par exemple :
4
/ \
2 7
/ \ / \
1 3 6 9
Donne : 4 2 7 1 3 6 9 |
voila l'implementation en C !
#include <stdio.h> #include <stdlib.h> #include <string.h> //déclaration du noeud! struct Noeud { char d; //la tu met le type que tu veux !! struct Noeud* succ_gauche; struct Noeud* succ_droit; }; typedef struct Noeud* TArbre; int main() { TArbre arbre=NULL; system("PAUSE"); return 0; } |
execute ça en c++
#include<iostream.h> struct noeud { int info; noeud *fg; noeud *fd; }; const int max=30; noeud *t[max]; void prefixe_rec(noeud *arbre){ noeud *nd; nd=arbre; if(nd!=NULL){ cout<<nd->info<<" "; prefixe_rec(nd->fg); prefixe_rec(nd->fd);} } void infixe_rec(noeud *arbre){ noeud *nd; nd=arbre; if(nd!=NULL){ infixe_rec(nd->fg); cout<<nd->info<<" "; infixe_rec(nd->fd);} } void suffixe_rec(noeud *arbre){ noeud *nd; nd=arbre; if(nd!=NULL){ suffixe_rec(nd->fg); suffixe_rec(nd->fd); cout<<nd->info<<" ";} } struct pile { noeud *sommet; pile *suivant; }; pile *creer_pile(pile *p){ p=NULL;} bool pile_vide(pile *p){ return (p==NULL);} void empiler(noeud *nd,pile *p){ pile *q; q=new(pile); q->suivant=p; q->sommet=nd; p=q;} noeud *depiler(pile *p){ pile *q; if (!pile_vide(p)){ return p->sommet; q=p; p=p->suivant; delete(q);} else cout<<"pile vide"; } int main(){ noeud *nd,*racine; int n,info; cout<<"Arbre representate par tableau"<<endl<<endl; cout<<"Si un neoud a un seul fis l'autre est represente par -1"<<endl<<endl; cout<<"Donnez le nombre de noeud (elements du tableau) "<<endl; cin>>n; for (int i=1;i<=n;i++){ cout<<"donnez la val du noeud "<<i<<" "; cin>>info; if (info==-1) t[i]=NULL; else { t[i]=new(noeud); t[i]->info=info; t[i]->fg=NULL; t[i]->fd=NULL;} } for (int i=1;i<=n/2;i++){ if (t[2*i]==NULL) t[i]->fg=NULL; else t[i]->fg=t[2*i]; if (t[2*i+1]==NULL)t[i]->fd=NULL;else t[i]->fd=t[2*i+1]; } racine=t[1]; prefixe_rec(racine);cout<<endl; infixe_rec(racine);cout<<endl; suffixe_rec(racine);cout<<endl; system("pause"); } |
Résultats pour arbre binaire de recherche(langage C)
Résultats pour arbre binaire de recherche(langage C)
Résultats pour arbre binaire de recherche(langage C)
Résultats pour arbre binaire de recherche(langage C)