AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTreeView durchlaufen

Ein Thema von BlueStarHH · begonnen am 31. Mär 2009 · letzter Beitrag vom 31. Mär 2009
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#1

TTreeView durchlaufen

  Alt 31. Mär 2009, 11:12
Hallo,

ich habe einen TTreeView, der beliebig tief verschachtelte Nodes enthält. Einigen Nodes ist per Node.Data ein Objekt zugewiesen. Ich möchte diesen Baum nun durchlaufen um alle Nodes zu löschen, bei denen
- Node.Data = nil ist und keine Kinder vorhanden sind
- Node.Data = nil ist und *ausschließlich* Kinder vorhanden, bei denen Node.Data = nil ist.

Beispiel: Eingabe:
Delphi-Quellcode:
Node 1 (Data = nil)
  Node 1.1 (Data = nil)
  Node 1.2 (Data = nil)
  Node 1.3 (Data = nil)
Node 2
  Node 2.1
    Node 2.1.1 (Data = nil)
      Node 2.1.1.1
  Node 2.2 (Data = nil)
  Node 2.3
    Node 2.3.1 (Data = nil)
    Node 2.3.2
Node 3
Ausgabe:

Delphi-Quellcode:
Node 2
  Node 2.1
    Node 2.1.1 (Data = nil)
      Node 2.1.1.1
  Node 2.3
    Node 2.3.2
Node 3
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: TTreeView durchlaufen

  Alt 31. Mär 2009, 11:27
Grundgerüst:
Delphi-Quellcode:
procedure VisitNode(node : TTreeNode);
var
  i : integer;
  s : string;
begin
  s := StringOfChar('-', node.level); // zum Einrücken
  // Ausgabe der Daten
  writeln(s, node.Text);

  // rekursiver Aufruf für alle Kinder
  for i := 0 to node.Count-1 do
     VisitNode(node.Item[i]);
end;
Andreas
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: TTreeView durchlaufen

  Alt 31. Mär 2009, 11:33
Ich kann die Nodes nicht einfach rekusiv durchlaufen, ich weiß ja nicht, was mit den Kindern ist. Es müsste irgendwie von unten nach oben durchlaufen werden. Also von den Kindern ausgehend.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: TTreeView durchlaufen

  Alt 31. Mär 2009, 11:47
Achso, ich habe deinen Text etwas schlampig gelesen.
Delphi-Quellcode:
function VisitNode(node : TTreeNode):Boolean;
var
  i : integer;
begin
  // rekursiver Aufruf für alle Kinder (Tiefensuche)
  for i := node.Count-1 downto 0 do // rückwärts, da durch Löschen node.Count verändert wird
  begin
     VisitNode(node.Item[i]);
  end;
  Result := (node.Data = nil) and (node.Count=0);
  if Result then
    node.delete;
end;
Andreas
  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 06:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz