Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
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);
        }