begin process at 2012 05 29 12:14:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

Générer un arbre binaire à partir de deux parcours définis


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Générer un arbre binaire à partir de deux parcours définis

mardi 20 octobre 2009 à 20:20:00 | Générer un arbre binaire à partir de deux parcours définis

Blonf

Bonjour,

Tout d'abord, étant nouveau, je tiens vivement à remercier les créateurs de ce forum d'entre-aide génial.

Dans le cadre d'un TP de programmation en C, on m'a demandé de développer un programme qui, à partir de deux chaines de caractères représentant un parcours préfixe et infixe d'un arbre binaire, génère l'arbre correspondant.

Par exemple :

- parcours préfixe : "b o n j o u r c a v a"
- parcours infixe : "j n o o b u c r v a a"
- l'arbre correspondant (à générer) est :

b
/ \
o u
/ \
n r
/ \ / \
j o c a
/ \
v a

Mais je ne vois pas du tout par où commencer...
La structure de mon arbre est définie comme ceci :

struct S_Arbre
{
char info;
struct S_Arbre *filsGauche, *filsDroit, *Pere;
} Arbre;

Arbre *P_Arbre;

Si quelqu'un peut m'aiguiller sur la démarche à entreprendre...

Merci d'avance.

Blonf

mardi 20 octobre 2009 à 20:24:14 | Re : Générer un arbre binaire à partir de deux parcours définis

Blonf

Réponse acceptée !
Désolé, l'affichage de l'arbre ne s'est pas fait comme je le pensais. J'espère que vous comprenez quand même ce que je demande.

Encore désolé.

Blonf
mercredi 21 octobre 2009 à 10:19:13 | Re : Générer un arbre binaire à partir de deux parcours définis

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Peut tu réécrire ton message en utilisant les balises de code et de formatage ?
Ton dessin d'arbre est trop ambigüe, et peut être même faux. Le problème étant que ton dessin est incompréhensible en l'état.
mercredi 21 octobre 2009 à 10:44:20 | Re : Générer un arbre binaire à partir de deux parcours définis

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
J'ai finalement compris ton dessin.
Cet exercice est pas facile du tout.
Déjà, ta structure est inutilement compliqué. Tu as juste besoin de ceci:

Code C/C++ :
typedef struct s_tree
{
  char info;
  struct s_tree *fg;
  struct s_tree *fd;
} s_tree;

s_tree* tree;


Ensuite voici la méthode que tu dois utilisé:
- Il faut clairement le faire en récursif, si tu ne veux pas t'arrache les cheveux. Il te suffit d'analyser les chaînes, et de trouver les pivots.
Par exemple: voici l'arbre que tu as avec les chaînes:

Code :
b o n j o u r c a v a
j n o o b u c r v a a

       b
      / \
     o   u
    /     \
   n       r
  / \     / \
 j   o   c   a
            / \
           v   a


Analysons les chaînes. Le premier caractère de la première chaîne te donne le pivot, que tu peux rechercher dans la second chaînes:

Code :
[b] o n j  o  u r c a v a
 j  n o o [b] u c r v a a


Donc

Code :
b (gauche)
o n j o
j n o o

et

b (droite)
u r c a v a
u c r v a a


Tu relances récursivement ceci jusqu'à arriver sur un cas simple:

Code :
[n] j o
 j [n] o


Tu arrives alors sur:

Code :
n (gauche)
j
j
n (droite)
o
o


Tu sais alors que tu vas pouvoir insérer un noeud j à gauche du noeud n et un noeud o à droite du noeud n.
A la remonté, ton arbre va se construire.
En soi l'exercice n'est pas si dur, trouver cette idée l'a été !!!
mercredi 21 octobre 2009 à 15:19:49 | Re : Générer un arbre binaire à partir de deux parcours définis

Blonf

Réponse acceptée !
Merci beaucoup CptPingu!!!

Très bonne idée, le code va sortir tout seul maintenant!

Pour la structure, c'est sur qu'avec cet algo je n'ai pas besoin d'un champ "père", c'est que j'avais essayé quelquechose (de plutôt inutile j'avoue...)

Encore merci.

Bonne journée.

Blonf.


Cette discussion est classée dans : arbre, générer, red, color, parcours


Répondre à ce message

Sujets en rapport avec ce message

arbre 4-aire [ par professeurr ] Salut,Quelqu'un pourrait me founir la méthode de la définition d'une sctructure (struc) en C d'un arbre 4-aire ou a un tuto référant à cette structure Parcours arbre Huffman [ par lordvan ] Bonjour,je voulais savoir si vous saviez la façon de procéder pour incrémenter de 1 le nb de cases d'un tableau (initialement int tab[0]) ? Je crois q Copier / coller un dossier en entier [ par roxod ] Bonjour, J'ai besoin de copier un dossier contenant des fichiers et des sous dossiers. Mon code : FILE *fds, *fdd; int value; fds = fopen(" [Aide]Foutu erreur de Link avec mySQL et VS2008 [ par Nixeus ] Bonjour à tous, Avant de commencer, je tiens à dire que j'ai cherché pas mal de temps sur forum et autres sites, ne trouvant pas de solution, je m'en modification partielle d'une chaine [ par fadiam ] bonjour Voici un un morceau de code qui réorganise une chaine de caractères(numéro de téléphone) en ajoutant des espaces s'il n'y en a pas. ex : 1234 Erreur "no matching function for call to machin::machin" [ par FineLizzyX ] Bonjour, En C++, chaque étape dans la réalisation de ce que je comprends petit à petit se solde par des journées entières de recherche afin de trouve comment manipuler printf et scanf apartir des structures [ par wissouramos ] Bonjour,j'ai une grosse problème,et j'espère que je trouvera une solution grâce a vous: j'ai une structure par exemple: [color=red]typedef struct { C - opérateur tilde [ par mayssakh84 ] Bonjour , Avez-vous une idée sur le tilde ci dessous: char inbuf; . . output.put([color=red]~[/color]inbuf); Je sais pas à quoi correspond le tilde


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales