3. Given the following Rust code snippet for maximum path sum, what will be the output?
struct TreeNode {
val: i32,
left: Option,
right: Option,
}
fn max_path_sum(root: Option) -> i32 {
fn helper(node: &Option, max_sum: &mut i32) -> i32 {
if let Some(n) = node {
let left = helper(&n.left, max_sum).max(0);
let right = helper(&n.right, max_sum).max(0);
*max_sum = (*max_sum).max(n.val + left + right);
n.val + left.max(right)
} else {
0
}
}
let mut max_sum = i32::MIN;
helper(&root, &mut max_sum);
max_sum
}
fn main() {
let root = Some(Box::new(TreeNode {
val: -10,
left: Some(Box::new(TreeNode {
val: 9,
left: None,
right: None,
})),
right: Some(Box::new(TreeNode {
val: 20,
left: Some(Box::new(TreeNode {
val: 15,
left: None,
right: None,
})),
right: Some(Box::new(TreeNode {
val: 7,
left: None,
right: None,
})),
})),
}));
println!("{}", max_path_sum(root));
}