Czy wie ktoś jak wyświetlić drzewo binarne na textboxie albo labelu?

0

Dokładnie jak w temacie. Udało mi się stworzyć drzewo binarne. Przedebugowełem kod i rzeczywiście to drzewo jest. Muszę jednak to drzewo (może trochę mało wygodnie) wyświetlić na textboxie albo na labelu?

Zrobiłem coś takiego, ale nie wiem czy to dobry pomysł, bo nie działa:(tzn. w ogóle nie widać żadnych liczb na textboxie)

 
private void wypisz_drzewo(WezelDrzewa wezel)
            {
                if (wezel != null)
                {
                    wypisz_drzewo(wezel.Lewa_Galaz);
                    int a = wezel.Dane;
                    wynik_drzewa.Text += a.ToString();
                    wypisz_drzewo(wezel.Prawa_Galaz);
                }
            }
            public void wypisz_drzewo_binarne_infixowo()
            {
                wypisz_drzewo(Korzen_Drzewa);
            }
2
            private void wypisz_drzewo(WezelDrzewa wezel,int deep)
            {
                if (wezel != null)
                {
                    wypisz_drzewo(wezel.Lewa_Galaz,deep+1);
                    wynik_drzewa.AppendText(new String('-', 2*deep)+wezel.Dane.ToString()+Environment.NewLine);
                    wypisz_drzewo(wezel.Prawa_Galaz,deep+1);
                }
            }
            public void wypisz_drzewo_binarne_infixowo()
            {
                wypisz_drzewo(Korzen_Drzewa,0);
            }

oraz jakąś czcionkę daj monospace'ową np Courier

2

Jeśli chodzi o sztukę to ładniej będzie mieć ToString w klasie WezelDrzewa:

private string ToString() {
	string result = "";
	
	if (this.Lewa_Galaz != null) {
		result += this.Lewa_Galaz.ToString() + " ";
	}
	
	result += this.Dane.ToString();
	
	if (this.Prawa_Galaz != null) {
		result += " " + this.Prawa_Galaz.ToString();
	}
	
	return result;
}

Jeśli nadal nie działa, pora będzie pobawić się w debugowanie :P

0

Wiecie co? Kompilator podaje jeszcze taki warning. Może to to jest przyczyną.
Treść:
Warning 1 Accessing a member on 'projekt_nr2.Form1.WezelDrzewa.Dane' may cause a runtime exception because it is a field of a marshal-by-reference class

 
 private void wypisz_drzewo_infx(WezelDrzewa wezel)
            {
                if (wezel != null)
                {
                    wypisz_drzewo_infx(wezel.Lewa_Galaz);
                    wynik_drzewa.AppendText(**wezel.Dane**.ToString());
                    
                    wypisz_drzewo_infx(wezel.Prawa_Galaz);
                }
            }
0

Wszystko zależy od tego czym są te .Dane z twojego przykładu wynika że jest to int ale z komunikatu - już nie.

1

Jak chcesz się pozbyć warninga to:

var dane = wezel.Dane;
wynik_drzewa.AppendText(dane.ToString());

https://msdn.microsoft.com/en-us/library/x524dkh4.aspx

0

Dobra, sory Dragon. Pełny kod:

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace projekt
{
    public partial class Form1 : Form
    {
        public static int i, j;
        public static int dolna_gr;
        public static int gorna_gr;
        public int iloscw_int;
       
        Drzewo_Binarne drzewo;
        Random element_losowy = new Random();
        public Form1()
        {
            InitializeComponent();
        }
        class WezelDrzewa : Form1
        {
            public int Dane;
            public WezelDrzewa Lewa_Galaz;
            public WezelDrzewa Prawa_Galaz;
           
        }
        public class Drzewo_Binarne : Form1
        {
            private WezelDrzewa bs_Korzen_Drzewa;
           
            public Drzewo_Binarne()
            {
                Korzen_Drzewa = null;
            }
            public Drzewo_Binarne(int wartosc_korzenia)
            {
                Korzen_Drzewa = Utworz_wezel(wartosc_korzenia);
            }

            private WezelDrzewa Utworz_wezel(int dane)
            {
                WezelDrzewa wezel = new WezelDrzewa();
                wezel.Dane = dane;
                return wezel;
            }
            public void dopisz_do_drzewa(int dane)
            {
                WezelDrzewa wezel_bierzacy = Korzen_Drzewa;
                WezelDrzewa nastepny_wezel = Korzen_Drzewa;
                while ((wezel_bierzacy.Dane != dane) && (!(nastepny_wezel == null)))
                {
                   wezel_bierzacy = nastepny_wezel;
                    if (nastepny_wezel.Dane < dane)
                         nastepny_wezel = nastepny_wezel.Prawa_Galaz;
                    else
                     nastepny_wezel = nastepny_wezel.Lewa_Galaz;
                    

                }
                if (wezel_bierzacy.Dane == dane)
                {
                    komunikat_lbl.Text = "Wystapila duplikacja.Nowy element nie bedzie wstawiony: " + dane.ToString();
                }
                else if (wezel_bierzacy.Dane < dane)
                {
                    wezel_bierzacy.Prawa_Galaz = Utworz_wezel(dane);
                }
                else
                {
                    wezel_bierzacy.Lewa_Galaz = Utworz_wezel(dane);
                }
            }
            private void wypisz_drzewo_infx(WezelDrzewa wezel)
            {
                if ((wezel != null))
                {
                    wypisz_drzewo_infx(bs_wezel.bs_Lewa_Galaz);
                    
                    wynik_drzewa.Text = Convert.ToString(wezel.Dane);
                    
                    
                    wypisz_drzewo_infx(wezel.bs_Prawa_Galaz);
                }
            }
            public void wypisz_drzewo_binarne_infixowo()
            {
                wypisz_drzewo_infx(Korzen_Drzewa);
            }
            
        }
        
        private void rdb_drzewo_binarne_CheckedChanged(object sender, EventArgs e)
        {
            tabControl1.SelectedTab = drzewo_binarne;

        }

        

        private void utworz_drzewo_binarne_Click(object sender, EventArgs e)
        {

            dolna_gr = Convert.ToInt32(dolna_granica_txb.Text);
            gorna_gr = Convert.ToInt32(gorna_granica_tbx.Text);
            iloscw_int = Convert.ToInt32(ilosc_wezlow_tbx.Text);
           
            drzewo = new Drzewo_Binarne(iloscw_int);
           
            
            for (i = 0; i <= 10; i++)
            {
                j = element_losowy.Next(dolna_gr,gorna_gr);
                drzewo.dopisz_do_drzewa(j);

            }
            drzewo.wypisz_drzewo_binarne_infixowo();
            
        }

        
    }
}

0

Po kiego ... (autocenzura) ... WezelDrzewa oraz Drzewo_Binarne pochodzą od Form1?

1 użytkowników online, w tym zalogowanych: 0, gości: 1