AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Baumartige Struktur in der richtigen Reihenfolge berechnen
Thema durchsuchen
Ansicht
Themen-Optionen

Baumartige Struktur in der richtigen Reihenfolge berechnen

Ein Thema von cltom · begonnen am 16. Okt 2021 · letzter Beitrag vom 21. Okt 2021
Antwort Antwort
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
905 Beiträge
 
Delphi 12 Athens
 
#1

AW: Baumartige Struktur in der richtigen Reihenfolge berechnen

  Alt 17. Okt 2021, 07:57
Eine Baumstruktur in den Daten verwaltet man ja eigentlich nicht als "Zweige" sondern als einzelne "Knoten". In einem Baum gibt es dann genau einen Wurzelknoten. An diesem hängen dann Kindknoten, die dann weitere Kindknoten haben können. Bei Binärbäumen kann man die Kindknoten in zwei Knoten-Variablen speichern (die dann ggf. left und right heißen), bei Bäumen mit höherem Grad verwaltet man die Kindknoten in einer Liste/Array/Dictionary/whatever, die man nach eigenem Ermessen sortieren kann (oder auch nicht). Jeder Kindknoten hat meist noch eine Referenz auf den Parent.

Zum Berechnen von irgendwas auf dem Baum ruft man dann eine Methode "Calculate" des RootKnoten auf, die dann z.B. so aussehen könnte.
Delphi-Quellcode:
function TMyNode.Calculate: Integer;
var i, sum: Integer
begin
  sum := 0;
  for i := 0 to ChildNodes.Count - 1 do
    sum := sum + ChildNodes[i].Calculate;
  fSubNodeCount := sum
  result := sum + 1;
end;
Diese Funktion würde z.B. die Anzahl der Elemente in dem Baum angeben (wenn ich mich auf die Schnelle nicht vertan habe), aber da kann man natürlich beliebige Dinge berechnen.

Oder anschaulich: Du musst den Wurzelknoten kennen - also den "Stamm". Wenn der etwas berechnen will, kümmert sich der Stamm darum, dass alle nötigen Daten vorliegen. Wenn er dazu Daten von seinen Kindknoten bzw. den daran hängenden Zweigen kennen muss, dann teilt er diesen das mit. Und wenn diese dafür wieder weitere Daten von Unterzweigen brauchen, dann läuft das automatisch nach unten durch.

Wenn die Reihenfolge der Kindknoten relevant ist (z.B. 5 muss vor 3 berechnet werden), dann kann man das erreichen, indem man die Kindknotenliste eines Knotens vor der Berechnung entsprechend sortiert.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.

Geändert von Gausi (17. Okt 2021 um 08:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz