sub walk_tree { my $tree = shift; my $per_node = shift; walk_tree($tree->left); $per_node->($tree->node); walk_tree($tree->right); } sub print_tree { my $tree = shift; walk_tree($tree, sub { print $_[0]; }); } sub sum_tree { my $tree = shift; my $total = 0; walk_tree($tree, sub { $total += $_[0]; }); return $total; }