private List <PunktTextComboAlsTupelErsatz> GetPoints(Bäumchen Baum, Graphics g) //Errechnet die Knotenpunltpunkte und die Knotenpunktwerte { List <PunktTextComboAlsTupelErsatz> points = new List <PunktTextComboAlsTupelErsatz>(); //finale Liste Dictionary <Bäumchen, Point> daddys = new Dictionary <Bäumchen, Point>(); List <Bäumchen> possibles = new List <Bäumchen> { Baum }; //Nein, das will ich nicht erklären, es funktioniert und das reicht //Es ist SEHR ineffizient, was die Speichernutzung angeht, hat aber eine nur quadratische Laufzeit for (int i = 0; i < my_Baum.GetDeep(); i++) { List <Bäumchen> news = new List <Bäumchen>(); Dictionary <Bäumchen, Point> daddy_news = new Dictionary <Bäumchen, Point>(); for (int u = 1; u <= possibles.Count; u++) { if (possibles[u - 1] != null) { Point p = new Point(Convert.ToInt16(b.Width / 2 * (u * 2 - 1) / Math.Pow(2, i)), (i + 1) * 50); points.Add(new PunktTextComboAlsTupelErsatz(p, possibles[u - 1].Value.ToString())); daddy_news.Add(possibles[u - 1], new Point(p.X, p.Y - 25)); try { g.DrawLine(new Pen(Color.Black, 5), new Point(p.X, p.Y - 25), daddys[possibles[u - 1].geschlechtslosesElternteil]); } catch { } } try { news.Add(possibles[u - 1].Sons[0]); } catch { news.Add(null); } try { news.Add(possibles[u - 1].Sons[1]); } catch { news.Add(null); } } daddys = daddy_news; possibles = news; } return(points); }
public Baumhaus() { var handle = GetConsoleWindow(); ShowWindow(handle, SW_HIDE); Consolethread = new Thread(IchBinDieKonsole); Consolethread.Start(); InitializeComponent(); my_tree = new Bäumchen(50); my_maler = new Baummaler(my_tree); mainholder.SetBaummaler(my_maler); rTB_out.Text = string.Join(", ", my_tree.Deep().ToArray()); }
public void Add(int value, bool redraw) //Fügt neue Werte hinzu { if (value == my_int) { goto Skip; //Wenn der Wert gleich dem eigenen ist, wird geskipt } int pos = (value < my_int) ? (0) : (1); if (sons[pos] == null) { sons[pos] = new Bäumchen(value, this); //Wenn kein Sohn an der Position existiert, wird ein neuer erstellt } else { sons[pos].Add(value); //wenn einer existiert, wird der Wert weitergegeben } //if (my_maler != null && redraw) my_maler.UpdateImage(); Skip :; }
public void Remove(int value, Bäumchen daddy = null) { if (value == my_int && geschlechtslosesElternteil != null) { geschlechtslosesElternteil.Sons[geschlechtslosesElternteil.sons.IndexOf(this)] = null; } else if (value < my_int) { Sons[0].Remove(value, this); } else if (value > my_int) { Sons[1].Remove(value, this); } else if (geschlechtslosesElternteil == null) { Reset(50); } if (geschlechtslosesElternteil == null) { ForceRedraw(); } }
internal Bäumchen(int value, Bäumchen father) //Konstruktor der nur genutzt wird, um Kinder zu erzeugen, aber nicht den Haupt-Baum { my_int = value; geschlechtslosesElternteil = father; }
public Baummaler(Bäumchen Baum) //Konstruktor { my_Baum = Baum; my_Baum.GetMaler(this); }