package RPerl::DataStructure::Graph::Tree::Binary;
use strict;
use warnings;
use RPerl::AfterSubclass;
our $VERSION = 0.001_000;
# NEED FIX: weird inheritance for these as-reference-only data structures
package RPerl::DataStructure::Graph::Tree::BinaryReference;
use parent qw(RPerl::DataStructure::Graph::TreeReference);
use RPerl::DataStructure::Graph::Tree;
# trees are comprised of nodes
use RPerl::DataStructure::Graph::Tree::Binary::Node;
# coderef parameter accepted by traverse method(s)
use RPerl::Code;
# must include here because we do not inherit data types
use RPerl::DataType::Unknown;
use RPerl::DataType::String;
use RPerl::DataStructure::Array;
#use RPerl::CodeBlock::Subroutine::Method; # NEED ADD: explicit method declarations
our hashref $properties =
{
root => my RPerl::DataStructure::Graph::Tree::Binary::NodeReference $TYPED_root = undef, # start with root = undef so we can test for empty tree
};
sub new_from_nested_arrayrefs {
{ my RPerl::DataStructure::Graph::Tree::BinaryReference $RETURN_TYPE };
(my string $class, my arrayref $input) = @ARG;
# RPerl::diag("in ...Tree::BinaryReference::new_from_nested_arrayrefs(), received \$class = '$class', and \$input =\n" . RPerl::DUMPER($input) . "\n");
my unknown $output = $class->new();
$output->{root} = binarytreenoderef->new_from_nested_arrayrefs($input);
return $output;
}
# much happens in the Node class, provide wrapper methods
sub traverse_breadthfirst_queue { { my unknown $RETURN_TYPE };(my RPerl::DataStructure::Graph::Tree::BinaryReference $self, my RPerl::CodeReference $callback) = @ARG; return $self->{root}->traverse_breadthfirst_queue($callback) if defined($self->{root}); }
sub traverse_depthfirst_preorder { { my unknown $RETURN_TYPE };(my RPerl::DataStructure::Graph::Tree::BinaryReference $self, my RPerl::CodeReference $callback) = @ARG; return $self->{root}->traverse_depthfirst_preorder($callback) if defined($self->{root}); }
sub to_nested_arrayrefs { { my arrayref $RETURN_TYPE };(my RPerl::DataStructure::Graph::Tree::BinaryReference $data) = @ARG; return $data->{root}->to_nested_arrayrefs(); }
# [[[ BINARY TREES ]]]
# ref to binary tree
# DEV NOTE: for naming conventions, see DEV NOTE in same code section of LinkedList.pm
package # hide from PAUSE indexing
binarytreeref;
use parent qw(RPerl::DataStructure::Graph::Tree::BinaryReference);
use RPerl::DataStructure::Graph::Tree::Binary;
our $properties = $properties; our $new_from_nested_arrayrefs = $new_from_nested_arrayrefs; our $traverse_depthfirst_preorder = $traverse_depthfirst_preorder; our $to_nested_arrayrefs = $to_nested_arrayrefs; our $traverse_breadthfirst_queue = $traverse_breadthfirst_queue;
# [[[ INT BINARY TREES ]]]
# (ref to binary tree) of integers
package # hide from PAUSE indexing
integer_binarytreeref;
use parent qw(binarytreeref);
our $properties = $properties; our $new_from_arrayref = $new_from_arrayref; our $binarytree_unshift = $binarytree_unshift; our $DUMPER = $DUMPER;
# NEED ADD: remaining sub-types
1; # end of class