logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Tree::Binary2 - An implementation of a binary tree

Authors

       Rob Kinyon <rob.kinyon@iinteractive.com>

       Stevan Little <stevan.little@iinteractive.com>

       Thanks to Infinity Interactive for generously donating our time.

Code Coverage

       Please see the relevant sections of Tree.

Description

       This is an implementation of a binary tree. This class inherits from Tree, which is an N-ary tree
       implemenation. Because of this, this class actually provides an implementation of a complete binary tree
       vs. a sparse binary tree.  The empty nodes are instances of Tree::Null, which is described in Tree.  This
       should have no effect on your usage of this class.

Methods

       In addition to the methods provided by Tree, the following items are provided or overriden.

       •   left([$child]) / right([$child])

           These  access  the  left  and right children, respectively. They are mutators, which means that their
           behavior changes depending on if you pass in a value.

           If you do not pass in any parameters, then it will act as a getter for the specific child, return the
           child (if set) or undef (if not).

           If you pass in a child, it will act as a setter for the specific child,  setting  the  child  to  the
           passed-in value and returning the $tree. (Thus, this method chains.)

           If you wish to unset the child, do "$tree>left( undef );"

       •   children()

           This will return the children of the tree.

           NOTE: There will be two children, always. Tree::Binary2 implements a complete binary tree, filling in
           missing   children  with  Tree::Null  objects.   (Please  see  Tree::Fast  for  more  information  on
           Tree::Null.)

       •   traverse([$order])

           When called in list context ("my @traversal = $tree->traverse()"), this will return  a  list  of  the
           nodes   in   the   given   traversal   order.  When  called  in  scalar  context  ("my  $traversal  =
           $tree->traverse()"), this will return a closure that will, over successive calls,  iterate  over  the
           nodes in the given traversal order. When finished it will return false.

           The default traversal order is pre-order.

           In addition to the traversal orders provided by Tree, Tree::Binary2 provides in-order traversals.

           •   In-order

               This  will  return  the result of an in-order traversal on the left node (if any), then the node,
               then the result of an in-order traversal on the right node (if any).

       NOTE: You have access to all the methods provided by Tree, but it is not recommended that you use many of
       them, unless you know what you're doing. This list includes add_child() and remove_child().

Name

       Tree::Binary2 - An implementation of a binary tree

Support

       Please see the relevant sections of Tree.

Synopsis

         my $tree = Tree::Binary2->new( 'root' );

         my $left = Tree::Binary2->new( 'left' );
         $tree->left( $left );

         my $right = Tree::Binary2->new( 'left' );
         $tree->right( $right );

         my $right_child = $tree->right;

         $tree->right( undef ); # Unset the right child.

         my @nodes = $tree->traverse( $tree->POST_ORDER );

         my $traversal = $tree->traverse( $tree->IN_ORDER );
         while ( my $node = $traversal->() ) {
             # Do something with $node here
         }

Todo

       •   Make in-order closure traversal work iteratively

       •   Make post-order closure traversal work iteratively

See Also