3. What is the output of the following code?
class TreeNode {
public int val;
public TreeNode left, right;
public TreeNode(int v) { val = v; }
}
var root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.right = new TreeNode(5);
root.right.right = new TreeNode(4);
var result = RightSideView(root);
Console.WriteLine(string.Join(", ", result));
IList<int> RightSideView(TreeNode root) {
var view = new List<int>();
var queue = new Queue<TreeNode>();
if (root != null) queue.Enqueue(root);
while (queue.Count > 0) {
int size = queue.Count;
for (int i = 0; i < size; i++) {
var node = queue.Dequeue();
if (node.left != null) queue.Enqueue(node.left);
if (node.right != null) queue.Enqueue(node.right);
if (i == size - 1) view.Add(node.val);
}
}
return view;
}