aboutsummaryrefslogtreecommitdiff
path: root/challenge-093/gustavo-chaves/ch-2.pl
blob: f39e87f26783fd3d701d0f29a90a7c3ea9849a83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env perl

use 5.030;
use warnings;

sub sum_path {
    my ($sum, $tree) = @_;

    my ($number, $left, $right) = @$tree;

    $sum += $number;

    if (defined $left && defined $right) {
        return sum_path($sum, $left) + sum_path($sum, $right);
    } elsif (defined $left) {
        return sum_path($sum, $left);
    } elsif (defined $right) {
        return sum_path($sum, $right);
    } else {
        return $sum;
    }
}

say sum_path(0, [1, [2, [3], [4]]]);
say sum_path(0, [1, [2, [4]], [3, [5], [6]]]);