Bird
Raised Fist0
DSA C++programming

Right Side View of Binary Tree in DSA C++

Choose your learning style10 modes available
Mental Model
We want to see the nodes visible when looking at the tree from the right side, which means the rightmost node at each level.
Analogy: Imagine standing on the right side of a tall building with many floors; you only see the windows on the right edge of each floor.
      1
     / \
    2   3
     \   \
      5   4

Right side view: 1 -> 3 -> 4
Dry Run Walkthrough
Input: Binary tree: 1 -> 2, 3; 2 -> null, 5; 3 -> null, 4
Goal: Find the rightmost node at each level to form the right side view list
Step 1: Start level order traversal at root (level 0)
Level 0: [1]
Rightmost node: 1
Why: We begin from the root to explore each level
Step 2: Move to level 1, nodes are 2 and 3
Level 1: [2 -> 3]
Rightmost node: 3
Why: We want the rightmost node at this level, which is 3
Step 3: Move to level 2, nodes are 5 and 4 (children of 2 and 3)
Level 2: [5 -> 4]
Rightmost node: 4
Why: At this level, 4 is the rightmost visible node
Result:
Right side view: 1 -> 3 -> 4
Annotated Code
DSA C++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

vector<int> rightSideView(TreeNode* root) {
    vector<int> result;
    if (!root) return result;
    queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()) {
        int levelSize = q.size();
        for (int i = 0; i < levelSize; i++) {
            TreeNode* node = q.front();
            q.pop();
            if (node->left) q.push(node->left);
            if (node->right) q.push(node->right);
            if (i == levelSize - 1) {
                result.push_back(node->val);
            }
        }
    }
    return result;
}

int main() {
    TreeNode* 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);

    vector<int> view = rightSideView(root);
    for (int val : view) {
        cout << val << " ";
    }
    cout << endl;
    return 0;
}
if (!root) return result;
handle empty tree by returning empty result
q.push(root);
start level order traversal from root
int levelSize = q.size();
determine number of nodes at current level
TreeNode* node = q.front(); q.pop();
process current node and remove from queue
if (node->left) q.push(node->left); if (node->right) q.push(node->right);
enqueue children for next level traversal
if (i == levelSize - 1) { result.push_back(node->val); }
record rightmost node value at this level
OutputSuccess
1 3 4
Complexity Analysis
Time: O(n) because we visit each node once during level order traversal
Space: O(n) because the queue can hold up to all nodes at the widest level
vs Alternative: Compared to DFS approach, BFS naturally processes nodes level by level, making it straightforward to pick rightmost nodes without extra depth tracking
Edge Cases
Empty tree
Returns empty list since there are no nodes
DSA C++
if (!root) return result;
Tree with only root node
Returns list with only root value
DSA C++
if (!root) return result;
Tree where some nodes have only left children
Still returns rightmost nodes at each level, which may be left children if no right child exists
DSA C++
if (node->left) q.push(node->left);
When to Use This Pattern
When asked to find visible nodes from one side of a tree, use level order traversal and pick the last node at each level to get the side view.
Common Mistakes
Mistake: Collecting the first node at each level instead of the last for right side view
Fix: Change condition to record node value only when processing the last node at the current level
Mistake: Using preorder DFS without tracking depth and overwriting values incorrectly
Fix: Use BFS or DFS with depth tracking and overwrite values only when deeper level is reached
Summary
Finds the rightmost node at each level of a binary tree to show the right side view.
Use when you need to see which nodes are visible from the right side of a tree.
The key insight is to traverse level by level and pick the last node at each level.

Practice

(1/5)
1. What does the "Right Side View of Binary Tree" represent?
easy
A. Nodes at the deepest level of the tree
B. Nodes visible when the tree is viewed from the right side
C. All leaf nodes of the binary tree
D. Nodes visible when the tree is viewed from the left side

Solution

  1. Step 1: Understand the view perspective

    The right side view shows nodes visible when looking at the tree from the right side, ignoring nodes hidden behind others.
  2. Step 2: Differentiate from other views

    Unlike left side or leaf views, right side view specifically captures the rightmost nodes at each level.
  3. Final Answer:

    Nodes visible when the tree is viewed from the right side -> Option B
  4. Quick Check:

    Right side view = rightmost nodes [OK]
Hint: Right side view shows last node at each tree level [OK]
Common Mistakes:
  • Confusing right side view with left side view
  • Thinking it shows all leaf nodes
  • Assuming it shows deepest nodes only
2. Which of the following C++ code snippets correctly declares a function to get the right side view of a binary tree?
easy
A. vector<int> rightSideView(TreeNode* root);
B. void rightSideView(TreeNode root);
C. int rightSideView(TreeNode* root);
D. vector<int> rightSideView(TreeNode root);

Solution

  1. Step 1: Check function return type

    The right side view returns a list of node values, so vector<int> is appropriate.
  2. Step 2: Check parameter type

    Function should take a pointer to root node (TreeNode*), not a value copy.
  3. Final Answer:

    vector<int> rightSideView(TreeNode* root); -> Option A
  4. Quick Check:

    Return vector<int>, parameter TreeNode* [OK]
Hint: Use vector<int> return and TreeNode* parameter [OK]
Common Mistakes:
  • Passing TreeNode by value instead of pointer
  • Returning int instead of vector<int>
  • Using void return type incorrectly
3. Given the binary tree below, what is the right side view output?

    1
   / \
  2   3
   \   \
    5   4
medium
A. [1, 3, 4]
B. [1, 2, 5]
C. [1, 3, 5]
D. [1, 2, 4]

Solution

  1. Step 1: Identify rightmost nodes at each level

    Level 1: Node 1; Level 2: Node 3 (right child of 1); Level 3: Node 4 (right child of 3).
  2. Step 2: Collect nodes in order

    Right side view is [1, 3, 4].
  3. Final Answer:

    [1, 3, 4] -> Option A
  4. Quick Check:

    Rightmost nodes per level = [1, 3, 4] [OK]
Hint: Pick last node visible at each tree level from right [OK]
Common Mistakes:
  • Choosing left child nodes instead of rightmost
  • Including nodes hidden behind others
  • Mixing node order in output
4. Consider this C++ function snippet to get the right side view:

void dfs(TreeNode* node, int level, vector<int>& res) {
  if (!node) return;
  if (level == res.size()) res.push_back(node->val);
  dfs(node->left, level + 1, res);
  dfs(node->right, level + 1, res);
}
What is the main bug in this code?
medium
A. It does not check for null nodes
B. It uses pass-by-value for vector, causing no updates
C. It pushes duplicate values into result vector
D. It visits left child before right, so rightmost nodes may be missed

Solution

  1. Step 1: Analyze traversal order

    Function visits left child before right child, so first node at each level is leftmost, not rightmost.
  2. Step 2: Understand impact on right side view

    Right side view requires visiting right child first to capture rightmost nodes at each level.
  3. Final Answer:

    It visits left child before right, so rightmost nodes may be missed -> Option D
  4. Quick Check:

    Right side view needs right-first DFS [OK]
Hint: Visit right child before left for correct right side view [OK]
Common Mistakes:
  • Visiting left child first in DFS for right side view
  • Ignoring null node checks (though present here)
  • Passing vector by value instead of reference
5. You want to find the right side view of a binary tree but the tree is very deep and unbalanced. Which approach is best to avoid stack overflow and get the correct right side view?
hard
A. Use recursive DFS visiting right child first without depth limit
B. Use recursive DFS visiting left child first
C. Use iterative level order traversal with a queue, capturing last node at each level
D. Use inorder traversal and collect nodes

Solution

  1. Step 1: Consider recursion limits on deep trees

    Deep unbalanced trees risk stack overflow with recursion, so iterative methods are safer.
  2. Step 2: Choose traversal method for right side view

    Level order traversal with a queue visits nodes level by level; capturing last node per level gives right side view.
  3. Step 3: Evaluate other options

    Recursive DFS may cause stack overflow; inorder traversal does not capture right side view correctly.
  4. Final Answer:

    Use iterative level order traversal with a queue, capturing last node at each level -> Option C
  5. Quick Check:

    Iterative BFS with queue = safe & correct [OK]
Hint: Use BFS queue, pick last node per level to avoid recursion issues [OK]
Common Mistakes:
  • Using recursion on very deep trees causing stack overflow
  • Visiting left child first in DFS for right side view
  • Using inorder traversal which doesn't capture right side view
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard