A voir également:
- Les arbres en c++
- Problème de réception télé du aux arbres? - Forum Cinéma / Télé
- Animal crossing wii arbres a clochettes . - Forum Wii
- Organigramme en arbre - Guide
- Pokémon version jaune G.C couper arbres - Forum Jeux vidéo
- Selon la NASA, les arbres peuvent nous prévenir des éruptions de volcans - Guide
3 réponses
Pose une question plus précise. Sinon :
http://www.commentcamarche.net/faq/sujet 10925 demander de l aide pour vos exercices sur ccm
Bonne chance
http://www.commentcamarche.net/faq/sujet 10925 demander de l aide pour vos exercices sur ccm
Bonne chance
Cela dépend fortement de ta structure d'arbre, il faudrait que tu me la donnes. A priori il s'agit simplement de faire un parcours récursif de ton arbre et d'examiner le noeud visité pour voir s'il correspond à ce que tu cherches.
Un exemple pour t'inspirer :
Dans ton cas il suffit d'interrompre les appels récursifs dès que tu as trouvé le noeud qui t'intéresse :
Bonne chance
Un exemple pour t'inspirer :
typedef struct _noeud_t{ unsigned id; // l'identifiant d'un noeud unsigned nb_fils; // le nombre de noeud fils struct _noeud_t ** fils; // les noeuds fils (un tableau de pointeur sur chaque noeud fils) } noeud_t; typedef noeud_t * arbre_t; void afficher_arbre(arbre_t a){ unsigned i; printf("noeud %d\n",a->id); // appel récursif for(i=0;i<a->nb_fils;++i) afficher_arbre(a->fils[i]); }
Dans ton cas il suffit d'interrompre les appels récursifs dès que tu as trouvé le noeud qui t'intéresse :
int chercher_noeud(arbre_t a,unsigned id,struct _node_t ** p){ unsigned i,trouve = 0; // Le noeud courant est le noeud recherché // *p pointe sur le noeud recherché. if(id == a->id){ *p = a; return 1; // trouvé (on remonte la valeur 1) } // On visite les noeuds fils du noeud courant à la recherche du noeud id // Si le noeud cherché si trouve, l'appel récursif basculera la valeur 0 // Si c'est une feuille on n'entre pas dans la boucle for et on remonte la valeur 0 for(i=0;i<a->nb_fils && !trouve;++i) trouve = chercher_noeud(a->fils[i],id); return trouve; }
Bonne chance
merci bqp pour votre reponse ,ma structure d'arbre est:
struct noeud{
string nom;//nom du repertoire
char etq;//etiquette(p:pour une partition,r:pour une repertoire et f:pour un fichier)
noeud*pfg;//pointeur vers le premier fils gauche
noeud*fr;//pointeur vers les freres
};
et j'avais fait la fonction qui verifier l'existance d'un noued donner voila:
bool find(noeud*rep,string nom){
noeud*b=rep,*l,*l1;
bool v;
if((b!=NULL)){
if((b->nom==nom)){v=true;}
else{l=sous_arb(b);
while((l!=NULL)&&(!v)){
l1=l;
while((l1!=NULL)&&(!v)){
v= find(l1,nom);
l1=l1->fr;
}
b=b->pfg;l=sous_arb(b);
}
}
}
return v;
}
mais je ne sais pas comment supprimer, vous pouvez me donne une idee?
merci
struct noeud{
string nom;//nom du repertoire
char etq;//etiquette(p:pour une partition,r:pour une repertoire et f:pour un fichier)
noeud*pfg;//pointeur vers le premier fils gauche
noeud*fr;//pointeur vers les freres
};
et j'avais fait la fonction qui verifier l'existance d'un noued donner voila:
bool find(noeud*rep,string nom){
noeud*b=rep,*l,*l1;
bool v;
if((b!=NULL)){
if((b->nom==nom)){v=true;}
else{l=sous_arb(b);
while((l!=NULL)&&(!v)){
l1=l;
while((l1!=NULL)&&(!v)){
v= find(l1,nom);
l1=l1->fr;
}
b=b->pfg;l=sous_arb(b);
}
}
}
return v;
}
mais je ne sais pas comment supprimer, vous pouvez me donne une idee?
merci
C'est exactement le même principe. Tu repères avec un appel récursif le nœud à partir duquel supprimer. Puis avec un appel récursif à partir de ce nœud, tu supprimes tous les fils. Il faut évidemment supprimer en commençant par les descendants. Ainsi une suppression récursive ressemble à :
Bonne chance
void supprimer(struct noeud_t * a){ unsigned i; // appel récursif for(i=0;i<a->nb_fils;++i){ if (a->fils[i]){ supprimer(a->fils[i]); free(a->fils[i]); } } free(a->fils); }
Bonne chance
voila je suis entraine de manipuler un arbre(n-aire) qui represente une repertoire qui contient des fichiers,
donc je veux supprimer un noued donner (fichier ou repertoire) mais j'arrive pas a le faire!
pouvez vous m'aide? et merci bqp