in reply to how to construct tree from parent pointer list
This is an algorithm that IMO every programmer should be familiar with. Its good that you are taking the time to learn.
#perl -e; use Data::Dumper; my %nodes; my @children; while (<DATA>) { chomp; my ($c,$p)=split/:/,$_; push @children,$c unless $nodes{$c}; $nodes{$_}{name}||=$_ for $c,$p; $nodes{$p}{kids}{$c}=$nodes{$c}; } delete $nodes{$_} for @children; my @roots=keys %nodes; print Dumper($nodes{$_}) for @roots; __END__ b:a c:a d:b e:c f:c
This version of the algorithm is flexible, it doesnt expect the nodes to be inorder as some of the solutions posted do. It will also identify mixed heirarchies (ie two distinct trees in the same list), and is fairly simple. It has the disadvantage that it must store a list of the nodes which are children until the end of the data input. Here is the output:
$VAR1 = { 'name' => 'a', 'kids' => { 'c' => { 'name' => 'c', 'kids' => { 'e' => { 'name' => 'e' }, 'f' => { 'name' => 'f' } } }, 'b' => { 'name' => 'b', 'kids' => { 'd' => { 'name' => 'd' } } } } };
---
$world=~s/war/peace/g
$world=~s/war/peace/g
|
---|
Replies are listed 'Best First'. | |
---|---|
various hash construction/ printing questions..
by bryank (Acolyte) on Jun 13, 2009 at 15:42 UTC | |
by demerphq (Chancellor) on Jun 13, 2009 at 16:42 UTC | |
by bryank (Acolyte) on Jun 13, 2009 at 22:50 UTC | |
by demerphq (Chancellor) on Jun 14, 2009 at 10:12 UTC | |
by bryank (Acolyte) on Jun 17, 2009 at 00:51 UTC | |
by bryank (Acolyte) on Jun 30, 2009 at 16:28 UTC |
In Section
Seekers of Perl Wisdom