1302. Deepest Leaves Sum

Given the root of a binary tree, return the sum of values of its deepest leaves.

 

Example 1:

Input: root = [1,2,3,4,5,null,6,7,null,null,null,null,8]
Output: 15

Example 2:

Input: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
Output: 19

 

Constraints:

  • The number of nodes in the tree is in the range [1, 104].
  • 1 <= Node.val <= 100

Rust Solution

struct Solution;
use rustgym_util::*;

trait Preorder {
    fn dfs(&self, level: usize, max: &mut usize, sum: &mut i32);
}

impl Preorder for TreeLink {
    fn dfs(&self, level: usize, max: &mut usize, sum: &mut i32) {
        use std::cmp::Ordering::*;
        if let Some(node) = self {
            let val = node.borrow().val;
            let left = &node.borrow().left;
            let right = &node.borrow().right;
            match level.cmp(max) {
                Greater => {
                    *max = level;
                    *sum = val;
                }
                Equal => {
                    *sum += val;
                }
                _ => {}
            }
            left.dfs(level + 1, max, sum);
            right.dfs(level + 1, max, sum);
        }
    }
}

impl Solution {
    fn deepest_leaves_sum(root: TreeLink) -> i32 {
        let mut res = 0;
        let mut max = 0;
        root.dfs(0, &mut max, &mut res);
        res
    }
}

#[test]
fn test() {
    let root = tree!(
        1,
        tree!(2, tree!(4, tree!(7), None), tree!(5)),
        tree!(3, None, tree!(6, None, tree!(8)))
    );
    let res = 15;
    assert_eq!(Solution::deepest_leaves_sum(root), res);
}

Having problems with this solution? Click here to submit an issue on github.