3. Given the following Rust code snippet for finding the inorder successor, what will be printed?
struct TreeNode {
val: i32,
left: Option,
right: Option,
}
fn inorder_successor(root: &Option, p_val: i32) -> Option<i32> {
let mut successor = None;
let mut current = root;
while let Some(node) = current {
if p_val < node.val {
successor = Some(node.val);
current = &node.left;
} else {
current = &node.right;
}
}
successor
}
fn main() {
let root = Some(Box::new(TreeNode {
val: 20,
left: Some(Box::new(TreeNode {
val: 10,
left: None,
right: Some(Box::new(TreeNode {
val: 15,
left: None,
right: None,
})),
})),
right: Some(Box::new(TreeNode {
val: 30,
left: None,
right: None,
})),
}));
let result = inorder_successor(&root, 15);
println!("{:?}", result);
}