aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-08-13 00:00:37 +0100
committerGitHub <noreply@github.com>2021-08-13 00:00:37 +0100
commitaee81b365a5ff553eb5265abfb1f46a9eb3d4f93 (patch)
tree100be90675837fefc67b91b2d140a5167bc3d0b3
parent483ddd767e7081f364cac710266a5dcd7e6a6b7d (diff)
parentadfa4b91deb903eab3acc3c89742fa72142d60f7 (diff)
downloadperlweeklychallenge-club-aee81b365a5ff553eb5265abfb1f46a9eb3d4f93.tar.gz
perlweeklychallenge-club-aee81b365a5ff553eb5265abfb1f46a9eb3d4f93.tar.bz2
perlweeklychallenge-club-aee81b365a5ff553eb5265abfb1f46a9eb3d4f93.zip
Merge pull request #4703 from andemark/branch-for-challenge-125
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;
+}