sub visit_preorder(&$) { my ($visitor, $node) = @_; my ($val, $l, $r) = @$node; $visitor->() for $val; &visit_preorder($visitor, $l) if defined $l; &visit_preorder($visitor, $r) if defined $r; }