[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