Problème affichage arbre binaire

Fermé
zozo76 - 30 mars 2013 à 19:38
 zozo76 - 31 mars 2013 à 18:00
Bonjour,

J'ai un petit problème sur l'affichage d'un arbre binaire, mon arbre est crée mais je dois créer une procédure (ou une fonction) qui va faire un affichage dans un ordre très spécifique.
Je vous met la structure de mon arbre :

     1
   /   \
  2     3
 / \   / \
4  5   6 7
  /     / \
 8     9  10

mes structures :
typedef struct boucle {
					char car;
					boucle *G, *D;
				} noeud;

typedef noeud *abin;


J'ai crée la procédure suivante :
void affichage (abin G, abin D)
{
	if (G != NULL)
	{
		cout<<(*G).car<<" ";
	}

	if (D != NULL)
	{
		cout<<(*D).car<<" ";
	}

	if (G != NULL)
	{
		if ((*G).G != NULL || (*D).D != NULL)
		{
			affichage ((*G).G, (*G).D);
		}
	}

	if (D != NULL)
	{
		if ((*D).G != NULL || (*D).D != NULL)
		{
			affichage ((*D).G, (*D).D);
		}
	}
}


(Je l'appel de cette manière : affichage (abin, NULL); )

L'affichage que je doit avoir : 1 2 3 4 5 6 7 8 9 10
L'affichage que j'ai : 1 2 3 4 5 8 6 7 9 10

Pour un chiffre ça fait un peu chier, je comprends pourquoi cette erreur se produit le programme ne s'occupe plus que d'une branche avant de passer à l'autre, mais je ne vois pas comment procéder autrement.

Pourriez-vous m'indiquer la marche à suivre, au passage j'ai crée une fonction hauteur qui renvoi la hauteur d'un arbre passé en paramètre, je ne sais pas si ça peut m'être utile...

A voir également:

2 réponses

UP

Allons je ne demande pas à ce que vous m'écriviez la procédure en question mais vous pourriez peut-être me donner quelques pistes ou un lien qui pourrait m'aider à faire un affichage ligne par ligne d'un arbre binaire de caractère.

C'est la dernière chose qui bloque dans mon programme...
0
Bon, je viens de trouver après maintes recherche, le nom de ce type de parcours est un parcours en largeur :
http://fr.wikipedia.org/wiki/Arbre_binaire#Parcours_en_largeur
http://rperrot.developpez.com/articles/algo/structures/arbres/#LVI-B
Il permet de parcourir un arbre binaire ligne par ligne comme je le disais. Il faut pour cela utiliser une file d'attente de type FIFO, c'est-à-dire que l'on rajoute par la tête de la file et que l'on traite puis on enlève par la queue.

Merci à ceux qui auront lu mon problème et qui n'ont pas réussi à m'aider.
0