Bird
Raised Fist0
DSA Javascriptprogramming

Tree Traversal Inorder Left Root Right in DSA Javascript

Choose your learning style10 modes available
Mental Model
Visit the left side first, then the middle, then the right side in a tree.
Analogy: Like reading a book where you first look at the left page, then the center page, then the right page.
    2
   / \
  1   3
↑root
Dry Run Walkthrough
Input: Tree: root=2, left=1, right=3
Goal: Print nodes in order: left child, root, right child
Step 1: Go left from root 2 to node 1
    2
   / \
  [1] 3
↑curr at 1
Why: We visit left subtree first in inorder
Step 2: Visit node 1 (no left child)
Visited: 1
    2
   / \
  1  3
↑curr back to 2
Why: Left subtree done, now visit root
Step 3: Visit root node 2
Visited: 1 2
    2
   / \
  1  3
↑curr moves right
Why: After root, visit right subtree
Step 4: Go right from root 2 to node 3
    2
   / \
  1  [3]
↑curr at 3
Why: Visit right child last
Step 5: Visit node 3 (no children)
Visited: 1 2 3
    2
   / \
  1  3
Traversal complete
Why: All nodes visited in left-root-right order
Result:
1 -> 2 -> 3 -> null
Annotated Code
DSA Javascript
class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}

function inorderTraversal(root) {
  const result = [];
  function traverse(node) {
    if (node === null) return; // base case: no node
    traverse(node.left); // visit left subtree
    result.push(node.val); // visit root
    traverse(node.right); // visit right subtree
  }
  traverse(root);
  return result;
}

// Driver code
const root = new TreeNode(2, new TreeNode(1), new TreeNode(3));
const output = inorderTraversal(root);
console.log(output.join(' -> ') + ' -> null');
if (node === null) return; // base case: no node
stop recursion when no node
traverse(node.left); // visit left subtree
go left first to visit left subtree
result.push(node.val); // visit root
add current node value after left subtree
traverse(node.right); // visit right subtree
go right last to visit right subtree
OutputSuccess
1 -> 2 -> 3 -> null
Complexity Analysis
Time: O(n) because we visit each node exactly once
Space: O(n) due to recursion stack and output array storing all nodes
vs Alternative: Compared to preorder or postorder, inorder also visits all nodes once, so same time and space complexity
Edge Cases
Empty tree (root is null)
Returns empty list, no nodes to visit
DSA Javascript
if (node === null) return; // base case: no node
Single node tree
Returns list with single node value
DSA Javascript
if (node === null) return; // base case: no node
Tree with only left children
Visits nodes from leftmost up to root in order
DSA Javascript
traverse(node.left); // visit left subtree
When to Use This Pattern
When you need to process nodes in sorted order for a binary search tree, use inorder traversal because it visits nodes left-root-right.
Common Mistakes
Mistake: Visiting root before left subtree (preorder) instead of after
Fix: Change order to traverse left subtree first, then root, then right subtree
Mistake: Forgetting to check for null node and causing errors
Fix: Add base case to return immediately if node is null
Summary
Visits tree nodes in left-root-right order.
Use when you want nodes in sorted order from a binary search tree.
Remember: 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. Root, Right subtree, Left subtree
B. Left subtree, Root, Right subtree
C. Right subtree, Root, Left subtree
D. Root, Left subtree, Right subtree

Solution

  1. Step 1: Understand inorder traversal definition

    Inorder traversal visits nodes in the order: left subtree first, then the root node, and finally the right subtree.
  2. Step 2: Match the traversal order to options

    Left subtree, Root, Right subtree correctly states the order as Left subtree, Root, Right subtree.
  3. Final Answer:

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

    Inorder = Left, Root, Right [OK]
Hint: Inorder always visits left child before root [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 JavaScript function signature for inorder traversal of a binary tree node named node?
easy
A. function inorder(node) { inorder(node.right); console.log(node.value); inorder(node.left); }
B. function inorder(node) { console.log(node.value); inorder(node.left); inorder(node.right); }
C. function inorder(node) { if(node) { inorder(node.left); console.log(node.value); inorder(node.right); } }
D. function inorder(node) { inorder(node.left); inorder(node.right); console.log(node.value); }

Solution

  1. Step 1: Recall inorder traversal steps in code

    Inorder traversal visits left subtree, then root, then right subtree. So the function must call inorder on left, print root, then call inorder on right.
  2. Step 2: Check each option's order

    function inorder(node) { if(node) { inorder(node.left); console.log(node.value); inorder(node.right); } } matches the correct order: left, root (console.log), right. Others have wrong orders.
  3. Final Answer:

    function inorder(node) { if(node) { inorder(node.left); console.log(node.value); inorder(node.right); } } -> Option C
  4. Quick Check:

    Left, Root, Right in code = function inorder(node) { if(node) { inorder(node.left); console.log(node.value); inorder(node.right); } } [OK]
Hint: Inorder prints after left call, before right call [OK]
Common Mistakes:
  • Printing before left subtree traversal
  • Swapping left and right subtree calls
  • Missing null check for node
3. Given the binary tree below, what is the output of inorder traversal?

    10
   /  \
  5    15
 /    /  \
3    12  20
medium
A. [3, 5, 10, 12, 15, 20]
B. [10, 5, 3, 15, 12, 20]
C. [3, 5, 12, 10, 15, 20]
D. [5, 3, 10, 15, 12, 20]

Solution

  1. Step 1: Traverse left subtree of root 10

    Left subtree of 10 is rooted at 5. Its left child is 3. Inorder of left subtree: visit 3, then 5 (root of subtree).
  2. Step 2: Visit root 10 and then right subtree

    After left subtree, visit root 10. Then traverse right subtree rooted at 15: left child 12, root 15, right child 20. So inorder right subtree is 12, 15, 20.
  3. Final Answer:

    [3, 5, 10, 12, 15, 20] -> Option A
  4. Quick Check:

    Inorder = Left, Root, Right = [3,5,10,12,15,20] [OK]
Hint: List nodes left-root-right recursively [OK]
Common Mistakes:
  • Visiting root before left subtree
  • Mixing order of right subtree nodes
  • Skipping leaf nodes
4. The following JavaScript code is intended to perform inorder traversal but has a bug. What is the bug?
function inorder(node) {
  if (node === null) return;
  console.log(node.value);
  inorder(node.left);
  inorder(node.right);
}
medium
A. It prints the root before left subtree, so not inorder
B. It does not check for null nodes
C. It misses traversing the right subtree
D. It calls inorder on left and right in wrong order

Solution

  1. Step 1: Analyze the order of operations in code

    The code prints node.value first, then calls inorder on left and right. This is preorder traversal order.
  2. Step 2: Identify correct inorder order

    Inorder traversal requires visiting left subtree first, then printing root, then right subtree. The code prints root before left subtree, which is incorrect.
  3. Final Answer:

    It prints the root before left subtree, so not inorder -> Option A
  4. Quick Check:

    Print after left call for inorder [OK]
Hint: Print after left subtree call for inorder [OK]
Common Mistakes:
  • Printing root before left subtree
  • Confusing preorder with inorder
  • Not checking for null nodes (though code does here)
5. You have a binary search tree (BST) and want to get all values in ascending order using inorder traversal. Which of the following modifications to the inorder traversal function will correctly collect values into an array instead of printing them?
function inorder(node, arr) {
  if (!node) return;
  // Fill missing code here
}
hard
A. inorder(node.left, arr); inorder(node.right, arr); arr.push(node.value);
B. arr.push(node.value); inorder(node.left, arr); inorder(node.right, arr);
C. inorder(node.right, arr); arr.push(node.value); inorder(node.left, arr);
D. inorder(node.left, arr); arr.push(node.value); inorder(node.right, arr);

Solution

  1. Step 1: Recall inorder traversal order for BST

    Inorder traversal visits left subtree, then root, then right subtree, which returns values in ascending order for BST.
  2. Step 2: Choose code that collects values in correct order

    inorder(node.left, arr); arr.push(node.value); inorder(node.right, arr); calls inorder on left, then pushes current node value, then calls inorder on right, correctly collecting values in ascending order.
  3. Final Answer:

    inorder(node.left, arr); arr.push(node.value); inorder(node.right, arr); -> Option D
  4. Quick Check:

    Left, Root, Right with push = inorder(node.left, arr); arr.push(node.value); inorder(node.right, arr); [OK]
Hint: Push after left call, before right call for sorted array [OK]
Common Mistakes:
  • Pushing before left subtree traversal
  • Swapping left and right subtree calls
  • Pushing after both subtree traversals
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