[Cologne-pm] table zu tree konvertieren
A. Pagaltzis
pagaltzis at gmx.de
Mon Nov 20 06:33:03 PST 2006
* Johannes Huettemeister <j.huettemeister at googlemail.com> [2006-11-16 13:20]:
> Hallo Zusammen,
>
> ich bin nicht gerade der Algorythmiker schlechthin, vielleicht
> habt Ihr einen Denkanstoß:
> Ich habe eine Tabelle wie diese:
>
> Node_id Parent_id
> 101 202
> 202 303
> 145 132
> 132 303
> 303 -1
> ...
> ...
>
> Über diese Abhängigkeit möchte ich jetzt einen Tree bilden. Ich
> hoffe ihr könnt auf ASCII-Art verzichten;-)
> Soweit bin ich:
> push @{$h{$parent_id}}, $parent_id;
Ich glaube, du meinst eher
push @{ $h{ $parent_id } }, $node_id if $parent_id != -1;
Bzw., der Ordnung und Verständlichkeit halber:
push @{ $children{ $parent_id } }, $node_id if $parent_id != -1;
Und dann braucht’s natürlich noch ein flottes
$parent{ $node_id } = $parent_id;
Dann kannst du den Baum nach Belieben hinauf- und hinunter-
wandern.
Oder du verzichtest auf den zweiten Hash und sagst, dass der 0te
Eintrag im Array eines Knotens immer auf den Mutterknoten weist.
Massiv ändert sich der Code dadurch nicht:
$node{ $parent_id } ||= [ undef ];
push @{ $node{ $parent_id } }, $node_id if $parent_id != -1;
$node{ $node_id }[ 0 ] = $parent_id;
Die erste Zeile sorgt dafür, dass das Array im Mutterknoten
mindestens einen Eintrag hat, bevor das `push` drauf losgelassen
wird, damit die Indizes auch immer stimmen.
> Jetzt muß ich irgendwie rekursiv einen neuen hash bauen.
Mir ist nicht klar, warum…
Gruss,
--
Aristoteles Pagaltzis // <http://plasmasturm.org/>
More information about the Cologne-pm
mailing list