private void ExploreArbreBinaire(int N)// parcours en profondeur Recursif { if (commentaires) { MessageBox.Show("Expore arbre binaire noeud " + N.ToString()); } // condition d'arret if (!ExisteND(N) && !ExisteNG(N)) { return; } if (ExisteNG(N)) { if (TypeDeParcours == 0)//préfixé { textBox2.Text = textBox2.Text + " => " + ValeurNG.ToString(); ExploreArbreBinaire(NG); } String toto = ValeurNG.ToString(); if (TypeDeParcours == 1)// suffixé { ExploreArbreBinaire(NG); textBox2.Text = textBox2.Text + " => " + toto;// ValeurNG.ToString(); } } if (ExisteND(N)) { if (TypeDeParcours == 0) //préfixé { textBox2.Text = textBox2.Text + " => " + ValeurND.ToString(); ExploreArbreBinaire(ND); } String toto = ValeurND.ToString(); if (TypeDeParcours == 1)// suffixé { ExploreArbreBinaire(ND); textBox2.Text = textBox2.Text + " => " + toto; } } }
private void PP2(int N) { int lgp; Pile.Clear(); textBox2.Clear(); Pile.Add(N); // Ajoute Racine textBox2.Text = Arbre[N].ToString(); affichePile(); do { lgp = Pile.Count - 1; N = Pile[lgp]; // les 3 cas ci-dessous s'excluent mutuellement if (ExisteNG(N)) // fils à gauche existe { textBox2.Text = textBox2.Text + " => " + ValeurNG.ToString(); Pile.Add(NG); // NG en haut de pile affichePile(); if (commentaires) { MessageBox.Show("NG exite donc on l'Ajoute à la pile " + ValeurNG.ToString()); } } if (!ExisteNG(N) && ExisteND(N)) { DepileHaut(); Pile.Add(ND); textBox2.Text = textBox2.Text + " => " + ValeurND.ToString(); affichePile(); if (commentaires) { MessageBox.Show("Pas de NG et un ND => on dépile et on Ajoute ce ND à la pile " + ValeurND.ToString()); } } if (!ExisteNG(N) && !ExisteND(N)) { if (commentaires) { MessageBox.Show("Pas de NG ni de ND (feuille)"); } DepileHaut(); lgp = Pile.Count - 1; if (lgp >= 0) { N = Pile[lgp]; } else { MessageBox.Show("Exploration terminée"); break; } N = Pile[lgp]; if (ExisteND(N)) // Remplacer Père par fils droit si le père possède un fils droit { DepileHaut(); Pile.Add(ND); textBox2.Text = textBox2.Text + " => " + ValeurND.ToString(); if (commentaires) { MessageBox.Show("Comme le père possédait un fils droit on remplace le père par ce fils droit"); } } affichePile(); if (commentaires) { MessageBox.Show("Remplacer Père par fils droit si noeud droit sinon dépiler haut 2 fois"); } } lgp = Pile.Count - 1; if (lgp >= 0) { N = Pile[lgp]; } else { MessageBox.Show("Exploration terminée"); } } while (lgp >= 0); }
private void BtParcoursEnLargeur_Click(object sender, EventArgs e) { bool fin = false; Pile.Add(0); this.textBox2.Text = Arbre[0] + "\r\n"; int c = 1; do { int cm = 0; int cpt = 0; int Memo; for (int i = 0; i <= c - 1; i++) //de 0 à longueur de pile corresponde aux noeud pères { fin = false; if (ExisteNG(Pile[0])) // ajoute à la pile le NG (rang du tableau) { Pile.Add(2 * Pile[0] + 1); this.textBox2.Text = this.textBox2.Text + ValeurNG.ToString() + " "; cpt++; affichePile(); if (commentaires) { MessageBox.Show("Pile + : Ajout du noeud Gauche " + ValeurNG.ToString()); } } if (ExisteND(Pile[0])) // ajoute à la pile le ND { Pile.Add(2 * Pile[0] + 2); this.textBox2.Text = this.textBox2.Text + ValeurND.ToString() + " "; cpt++; affichePile(); if (commentaires) { MessageBox.Show("Pile + : Ajout du noeud Droit " + ValeurND.ToString()); } } Memo = Pile[0]; Pile.RemoveAt(0); // vire le premier élément de la pile cm++; affichePile(); if (commentaires) { MessageBox.Show("Pile - : Suppression du noeud de bas de pile : " + Memo.ToString()); } } c = cpt; // indique au prochain tour de boucle le nombre de noeuds ajoutés donc de dépilages this.textBox2.Text = this.textBox2.Text + "\r\n"; if (commentaires) { MessageBox.Show(" Nb Noeuds ajoutés = nb tours de boucle = " + c.ToString() + " Noeuds supprimés = " + cm.ToString()); } if (cpt == 0) { if (commentaires) { MessageBox.Show(" pas de fils => Arret de l'exploration"); } fin = true; } // fin si pas de noeud ajouté } while (!fin); }