diff options
| author | Mark A <andemark@a-iot1t.uch.ad.pvt> | 2021-08-12 04:39:15 -0600 |
|---|---|---|
| committer | Mark A <andemark@a-iot1t.uch.ad.pvt> | 2021-08-12 04:39:15 -0600 |
| commit | adfa4b91deb903eab3acc3c89742fa72142d60f7 (patch) | |
| tree | 9586bcb6643e83f8e6cd31299efa1f2999f17f11 | |
| parent | 3840e4e70137475f998f63739d3c576ae10aa8b6 (diff) | |
| download | perlweeklychallenge-club-adfa4b91deb903eab3acc3c89742fa72142d60f7.tar.gz perlweeklychallenge-club-adfa4b91deb903eab3acc3c89742fa72142d60f7.tar.bz2 perlweeklychallenge-club-adfa4b91deb903eab3acc3c89742fa72142d60f7.zip | |
ch-2.pl
| -rw-r--r-- | challenge-125/mark-anderson/perl/ch-2.pl | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/challenge-125/mark-anderson/perl/ch-2.pl b/challenge-125/mark-anderson/perl/ch-2.pl new file mode 100644 index 0000000000..8067040251 --- /dev/null +++ b/challenge-125/mark-anderson/perl/ch-2.pl @@ -0,0 +1,62 @@ +#!/usr/bin/env perl + +use Tree::Binary; +use Modern::Perl; +use List::Util 'max'; + +=begin example1 + 1 + / \ + 2 5 + / \ / \ +3 4 6 7 + / \ + 8 10 + / + 9 +=end example1 +=cut + +my $example1 = Tree::Binary->new('1') + ->setLeft(Tree::Binary->new('2') + ->setLeft(Tree::Binary->new('3')) + ->setRight(Tree::Binary->new('4'))) + ->setRight(Tree::Binary->new('5') + ->setLeft(Tree::Binary->new('6')) + ->setRight(Tree::Binary->new('7') + ->setLeft(Tree::Binary->new('8') + ->setLeft(Tree::Binary->new('9'))) + ->setRight(Tree::Binary->new('10')))); + +say treeDiameter($example1); # 6 + +sub treeDiameter +{ + my $btree = shift; + my @diameters; + + $btree->traverse + ( + sub + { + my ($tree) = @_; + + my $leftHeight = 0; + my $rightHeight = 0; + + if ($tree->hasLeft) + { + $leftHeight = $tree->getLeft->height; + } + + if ($tree->hasRight) + { + $rightHeight = $tree->getRight->height; + } + + push @diameters, $leftHeight + $rightHeight; + } + ); + + max @diameters; +} |
