in reply to Serializing Trees using FIRSTKEY/NEXTKEY methods?
The NEXTNODE method there traverses the tree, looking for the next logical node. This assumes that your B-Tree implementation uses a hash-style tree with references between nodes. To switch it to using text keys instead, you could write wrapper methods, as proposed below, or modify the code slightly to set $key instead of $node.sub FIRSTNODE { my ($root_node) = @_; my $node = $root_node; while ($node->{left}) { $node = $node->{left}; } return $node; } sub NEXTNODE { my ($node) = @_; if ($node->{right}) { $node = FIRSTNODE($node->{right}); } elsif ($node->{parent}) { if ($node->{parent}->{left} == $node) { $node = $node->{parent}; } else { while ($node->{parent}->{right} == $node) { $node = $node->{parent}; } return unless $node; $node = $node->{parent}; } } else { $node = undef; } return $node; }
sub FIRSTKEY { my $node = FIRSTNODE($root_node); return $node && $node->{key}; } sub NEXTKEY { my ($key) = @_; my $node = NEXTNODE (FindNode ($key)); return $node && $node->{key}; }
|
|---|