3. Given the following Rust code snippet, what is the output printed?
struct TreeNode {
val: i32,
left: Option,
right: Option,
}
fn diameter_of_binary_tree(root: &Option) -> i32 {
fn depth(node: &Option, max_diameter: &mut i32) -> i32 {
if let Some(n) = node {
let left_depth = depth(&n.left, max_diameter);
let right_depth = depth(&n.right, max_diameter);
*max_diameter = (*max_diameter).max(left_depth + right_depth);
1 + left_depth.max(right_depth)
} else {
0
}
}
let mut max_diameter = 0;
depth(root, &mut max_diameter);
max_diameter
}
fn main() {
let root = Some(Box::new(TreeNode {
val: 1,
left: Some(Box::new(TreeNode {
val: 2,
left: None,
right: None,
})),
right: Some(Box::new(TreeNode {
val: 3,
left: None,
right: None,
})),
}));
println!("{}", diameter_of_binary_tree(&root));
}