Arbre binaire de recherche(langage C)
matafix
Messages postés
45
Statut
Membre
-
manel zairi -
manel zairi -
bsr,
qui peut m'aider je veux implementer un arbre binaire de recherche par tableau mais j'arrive pas
qui peut m'aider je veux implementer un arbre binaire de recherche par tableau mais j'arrive pas
Configuration: Windows XP Firefox 2.0.0.14
3 réponses
-
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");
} -
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;
}