aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark A <andemark@a-iot1t.uch.ad.pvt>2021-08-12 04:39:15 -0600
committerMark A <andemark@a-iot1t.uch.ad.pvt>2021-08-12 04:39:15 -0600
commitadfa4b91deb903eab3acc3c89742fa72142d60f7 (patch)
tree9586bcb6643e83f8e6cd31299efa1f2999f17f11
parent3840e4e70137475f998f63739d3c576ae10aa8b6 (diff)
downloadperlweeklychallenge-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.pl62
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;
+}