3. Given the following Rust code snippet for maximum width calculation, what is the printed output?
struct TreeNode {
val: i32,
left: Option,
right: Option,
}
fn max_width(root: Option) -> usize {
use std::collections::VecDeque;
if root.is_none() { return 0; }
let mut queue = VecDeque::new();
queue.push_back(root.unwrap());
let mut max_width = 0;
while !queue.is_empty() {
let level_size = queue.len();
max_width = max_width.max(level_size);
for _ in 0..level_size {
let node = queue.pop_front().unwrap();
if let Some(left) = node.left {
queue.push_back(left);
}
if let Some(right) = node.right {
queue.push_back(right);
}
}
}
max_width
}
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: Some(Box::new(TreeNode { val: 4, left: None, right: None })),
right: None,
})),
}));
println!("{}", max_width(root));
}