diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-08-13 00:00:37 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-13 00:00:37 +0100 |
| commit | aee81b365a5ff553eb5265abfb1f46a9eb3d4f93 (patch) | |
| tree | 100be90675837fefc67b91b2d140a5167bc3d0b3 | |
| parent | 483ddd767e7081f364cac710266a5dcd7e6a6b7d (diff) | |
| parent | adfa4b91deb903eab3acc3c89742fa72142d60f7 (diff) | |
| download | perlweeklychallenge-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.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; +} |
