Bird
Raised Fist0
DSA C++programming

Tree Traversal Inorder Left Root Right in DSA C++

Choose your learning style10 modes available
Mental Model
Visit the left side first, then the current node, then the right side. This order visits nodes in a sorted way for binary search trees.
Analogy: Imagine reading a book where you first read the left page, then the middle page, then the right page, so you don't miss anything and keep the order.
    2
   / \
  1   3

Traversal order: 1 -> 2 -> 3
Dry Run Walkthrough
Input: Binary tree: root=2, left child=1, right child=3; perform inorder traversal
Goal: Print nodes in left-root-right order to get sorted output
Step 1: Start at root (2), move to left child (1)
Current node: 1
Tree: 2 -> left: 1, right: 3
Why: In inorder, we visit left subtree first
Step 2: Node 1 has no left child, print 1
Output: 1
Current node: 1
Why: Left subtree done, now visit root
Step 3: Move back to parent (2), print 2
Output: 1 2
Current node: 2
Why: After left subtree, visit root
Step 4: Move to right child (3), no left child, print 3
Output: 1 2 3
Current node: 3
Why: Visit right subtree after root
Result:
Output: 1 2 3
Annotated Code
DSA C++
#include <iostream>
using namespace std;

struct Node {
    int data;
    Node* left;
    Node* right;
    Node(int val) : data(val), left(nullptr), right(nullptr) {}
};

void inorderTraversal(Node* root) {
    if (root == nullptr) return; // base case: empty node
    inorderTraversal(root->left); // visit left subtree
    cout << root->data << " "; // visit root
    inorderTraversal(root->right); // visit right subtree
}

int main() {
    Node* root = new Node(2);
    root->left = new Node(1);
    root->right = new Node(3);

    inorderTraversal(root);
    cout << endl;
    return 0;
}
if (root == nullptr) return; // base case: empty node
stop recursion when node is empty
inorderTraversal(root->left); // visit left subtree
recursively visit left child first
cout << root->data << " "; // visit root
print current node after left subtree
inorderTraversal(root->right); // visit right subtree
recursively visit right child last
OutputSuccess
1 2 3
Complexity Analysis
Time: O(n) because each node is visited exactly once
Space: O(h) where h is tree height due to recursion stack
vs Alternative: Compared to iterative traversal, recursive is simpler but uses call stack; iterative uses explicit stack but same time complexity
Edge Cases
Empty tree (root is nullptr)
No output, function returns immediately
DSA C++
if (root == nullptr) return; // base case: empty node
Single node tree
Prints the single node value
DSA C++
if (root == nullptr) return; // base case: empty node
Left skewed tree (all nodes only have left child)
Prints nodes from bottom left up to root in order
DSA C++
inorderTraversal(root->left); // visit left subtree
When to Use This Pattern
When a problem asks to visit all nodes in sorted order in a binary search tree, use inorder traversal because it visits left, root, then right nodes.
Common Mistakes
Mistake: Visiting root before left subtree (preorder) instead of after
Fix: Move the print statement after the recursive call to left child
Mistake: Skipping the right subtree traversal
Fix: Add recursive call to right child after printing root
Summary
Visits nodes in left-root-right order to get sorted output for binary trees.
Use when you want to process nodes in ascending order or sorted sequence.
Remember: always visit left subtree first, then root, then right subtree.

Practice

(1/5)
1. What is the order of nodes visited in an inorder traversal of a binary tree?
easy
A. Right subtree, Root, Left subtree
B. Root, Left subtree, Right subtree
C. Left subtree, Root, Right subtree
D. Root, Right subtree, Left subtree

Solution

  1. Step 1: Understand inorder traversal definition

    Inorder traversal visits nodes in the order: left child, then root, then right child.
  2. Step 2: Apply to binary tree traversal

    This means we first visit all nodes in the left subtree, then the root node, then all nodes in the right subtree.
  3. Final Answer:

    Left subtree, Root, Right subtree -> Option C
  4. Quick Check:

    Inorder = Left, Root, Right [OK]
Hint: Remember: Inorder means Left, Root, then Right [OK]
Common Mistakes:
  • Confusing inorder with preorder or postorder
  • Visiting root before left subtree
  • Visiting right subtree before root
2. Which of the following is the correct C++ function signature for inorder traversal of a binary tree node pointer Node* root?
easy
A. int inorderTraversal(Node* root)
B. int inorderTraversal(Node root)
C. void inorderTraversal(Node root)
D. void inorderTraversal(Node* root)

Solution

  1. Step 1: Identify correct parameter type

    Traversal functions usually take a pointer to the root node to access the tree nodes.
  2. Step 2: Identify correct return type

    Traversal functions typically return void because they print or process nodes without returning a value.
  3. Final Answer:

    void inorderTraversal(Node* root) -> Option D
  4. Quick Check:

    Pointer parameter and void return [OK]
Hint: Traversal functions use Node* and void return [OK]
Common Mistakes:
  • Passing node by value instead of pointer
  • Using int return type instead of void
  • Missing pointer symbol * in parameter
3. Given the binary tree:
    2
   / \
  1   3

What is the output of the inorder traversal function that prints node values separated by spaces?
medium
A. 1 2 3
B. 2 1 3
C. 3 2 1
D. 1 3 2

Solution

  1. Step 1: Traverse left subtree

    Start at root (2), go left to node (1), print 1 since it has no left child.
  2. Step 2: Visit root and right subtree

    Return to root (2), print 2, then go right to node (3), print 3.
  3. Final Answer:

    1 2 3 -> Option A
  4. Quick Check:

    Inorder traversal output = 1 2 3 [OK]
Hint: Inorder prints nodes in ascending order for BST [OK]
Common Mistakes:
  • Printing root before left subtree
  • Printing right subtree before root
  • Confusing preorder or postorder output
4. Consider this C++ inorder traversal code snippet:
void inorder(Node* root) {
  if (root == nullptr) return;
  inorder(root->left);
  std::cout << root->val << " ";
  inorder(root->right);
}

What is the error if the output is empty for a non-empty tree?
medium
A. The base case condition is incorrect
B. The function is not called with the root node
C. The print statement is missing
D. The traversal order is wrong

Solution

  1. Step 1: Check base case correctness

    The base case correctly returns when root is nullptr, so no error here.
  2. Step 2: Verify function call

    If output is empty, likely the function was never called with the actual root node of the tree.
  3. Final Answer:

    The function is not called with the root node -> Option B
  4. Quick Check:

    Missing initial call causes no output [OK]
Hint: Always call traversal with actual root node [OK]
Common Mistakes:
  • Not calling traversal function at all
  • Calling with nullptr instead of root
  • Assuming print statement missing when it exists
5. You have a binary tree with nodes:
      4
     / \
    2   6
   / \ / \
  1  3 5  7

Using inorder traversal, which sequence of node values will you get?
hard
A. [1, 2, 3, 4, 5, 6, 7]
B. [4, 2, 1, 3, 6, 5, 7]
C. [7, 6, 5, 4, 3, 2, 1]
D. [1, 3, 2, 5, 7, 6, 4]

Solution

  1. Step 1: Traverse left subtree of root (4)

    Visit left subtree rooted at 2: inorder visits 1, then 2, then 3.
  2. Step 2: Visit root and right subtree

    After left subtree, visit root 4, then right subtree rooted at 6: visit 5, then 6, then 7.
  3. Final Answer:

    [1, 2, 3, 4, 5, 6, 7] -> Option A
  4. Quick Check:

    Inorder traversal of BST gives sorted sequence [OK]
Hint: Inorder traversal of BST returns sorted node values [OK]
Common Mistakes:
  • Mixing preorder or postorder sequences
  • Visiting root before left subtree
  • Visiting right subtree before root
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