class TreeNode {
constructor(val = 0, left = null, right = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
function rightSideView(root) {
if (!root) return [];
const result = [];
const queue = [root];
while (queue.length > 0) {
const levelSize = queue.length;
for (let i = 0; i < levelSize; i++) {
const node = queue.shift();
// If this is the last node in the current level, add its value
if (i === levelSize - 1) {
result.push(node.val);
}
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
}
return result;
}
// Driver code
const root = new TreeNode(1,
new TreeNode(2, null, new TreeNode(5)),
new TreeNode(3, null, new TreeNode(4))
);
const view = rightSideView(root);
console.log(view.join(', '));handle empty tree edge case
initialize queue for level order traversal starting at root
const levelSize = queue.length;
determine number of nodes at current level
const node = queue.shift();
remove node from front of queue to process
if (i === levelSize - 1) { result.push(node.val); }
add value of rightmost node at this level to result
if (node.left) queue.push(node.left);
enqueue left child if exists
if (node.right) queue.push(node.right);
enqueue right child if exists