Bird
Raised Fist0
DSA Javascriptprogramming

Tree Traversal Preorder Root Left Right in DSA Javascript

Choose your learning style10 modes available
Mental Model
Visit the root node first, then explore the left subtree, and finally the right subtree.
Analogy: Imagine reading a family tree starting from the oldest ancestor, then visiting their left child and all descendants before moving to the right child and their descendants.
    1
   / \
  2   3
 / \
4   5

↑ Root at 1
Dry Run Walkthrough
Input: Tree: 1 as root, 2 as left child, 3 as right child, 4 as left child of 2, 5 as right child of 2
Goal: Print nodes in preorder: root first, then left subtree, then right subtree
Step 1: Visit root node 1
Visited: 1
Why: Start traversal at root
Step 2: Traverse left subtree starting at node 2
Visited: 1 -> 2
Why: After root, visit left subtree
Step 3: Traverse left subtree of node 2, visit node 4
Visited: 1 -> 2 -> 4
Why: Preorder visits left child before right
Step 4: Back to node 2, traverse right subtree, visit node 5
Visited: 1 -> 2 -> 4 -> 5
Why: Complete left subtree before right subtree
Step 5: Traverse right subtree starting at node 3
Visited: 1 -> 2 -> 4 -> 5 -> 3
Why: After left subtree, visit right subtree
Result:
1 -> 2 -> 4 -> 5 -> 3
Annotated Code
DSA Javascript
class TreeNode {
  constructor(val) {
    this.val = val;
    this.left = null;
    this.right = null;
  }
}

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

// Build tree from dry_run input
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);

console.log(preorderTraversal(root));
if (node === null) return; // base case: no node
stop traversal when no node to visit
result.push(node.val); // visit root
record current node value before children
traverse(node.left); // traverse left subtree
explore left subtree first
traverse(node.right); // traverse right subtree
explore right subtree after left
OutputSuccess
1 -> 2 -> 4 -> 5 -> 3
Complexity Analysis
Time: O(n) because each node is visited exactly once
Space: O(n) due to recursion stack and result storage in worst case
vs Alternative: Compared to inorder or postorder, preorder visits nodes in a different order but has the same time and space complexity
Edge Cases
Empty tree (root is null)
Returns empty string, no nodes visited
DSA Javascript
if (node === null) return; // base case: no node
Tree with single node
Returns that single node value
DSA Javascript
if (node === null) return; // base case: no node
When to Use This Pattern
When you need to process or print nodes starting from the root before children, preorder traversal is the pattern to use.
Common Mistakes
Mistake: Visiting left or right child before the root node
Fix: Always visit the current node first before traversing children
Mistake: Not handling null nodes causing errors
Fix: Add base case to return immediately when node is null
Summary
Visits nodes starting from root, then left subtree, then right subtree
Use when you want to process root before its children, such as copying a tree
Remember: root first, then left, then right

Practice

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

Solution

  1. Step 1: Understand preorder traversal definition

    Preorder traversal visits the root node first, then the left subtree, and finally the right subtree.
  2. Step 2: Confirm the visiting order

    The visiting order is Root, then Left child, then Right child.
  3. Final Answer:

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

    Preorder = Root, Left, Right [OK]
Hint: Remember preorder starts with the root node first [OK]
Common Mistakes:
  • Confusing preorder with inorder or postorder
  • Visiting left or right child before root
  • Mixing up left and right subtree order
2. Which of the following is the correct JavaScript function signature for preorder traversal of a binary tree node named root?
easy
A. function preorder(root) { if(root) { preorder(root.left); preorder(root.right); console.log(root.value); } }
B. function preorder(root) { if(root) { preorder(root.left); console.log(root.value); preorder(root.right); } }
C. function preorder(root) { if(root) { preorder(root.right); preorder(root.left); console.log(root.value); } }
D. function preorder(root) { if(root) { console.log(root.value); preorder(root.left); preorder(root.right); } }

Solution

  1. Step 1: Recall preorder traversal order

    Preorder visits root first, then left subtree, then right subtree.
  2. Step 2: Check function steps

    function preorder(root) { if(root) { console.log(root.value); preorder(root.left); preorder(root.right); } } prints root value first, then recursively visits left and right children, matching preorder.
  3. Final Answer:

    function preorder(root) { if(root) { console.log(root.value); preorder(root.left); preorder(root.right); } } -> Option D
  4. Quick Check:

    Print root before children = function preorder(root) { if(root) { console.log(root.value); preorder(root.left); preorder(root.right); } } [OK]
Hint: Print root value before recursive calls for preorder [OK]
Common Mistakes:
  • Printing after visiting children (postorder)
  • Swapping left and right recursive calls
  • Missing base case for null root
3. Given the binary tree below, what is the output of a preorder traversal?
    1
   / \
  2   3
 / \
4   5

Use the format: 1 -> 2 -> 4 -> 5 -> 3 -> null
medium
A. 1 -> 2 -> 4 -> 5 -> 3 -> null
B. 4 -> 2 -> 5 -> 1 -> 3 -> null
C. 2 -> 4 -> 5 -> 1 -> 3 -> null
D. 1 -> 3 -> 2 -> 4 -> 5 -> null

Solution

  1. Step 1: Start at root node 1

    Visit root first: 1
  2. Step 2: Traverse left subtree of 1

    Visit 2, then its left child 4, then right child 5
  3. Step 3: Traverse right subtree of 1

    Visit 3
  4. Final Answer:

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

    Preorder visits root, left, right = 1 -> 2 -> 4 -> 5 -> 3 -> null [OK]
Hint: Follow root, then left subtree, then right subtree order [OK]
Common Mistakes:
  • Visiting left subtree after right subtree
  • Starting traversal from left child instead of root
  • Confusing preorder with inorder or postorder
4. The following JavaScript code is intended to perform a preorder traversal and print node values. What is the error?
function preorder(root) {
  if (root === null) return;
  preorder(root.left);
  console.log(root.value);
  preorder(root.right);
}
medium
A. The console.log should be before the recursive calls
B. The base case should check for undefined, not null
C. The function should return a value instead of void
D. The left and right recursive calls are swapped

Solution

  1. Step 1: Analyze the order of operations

    The code visits left child first, then prints root, then visits right child.
  2. Step 2: Compare with preorder traversal order

    Preorder requires printing root before visiting children, so console.log should be before recursive calls.
  3. Final Answer:

    The console.log should be before the recursive calls -> Option A
  4. Quick Check:

    Print root first in preorder [OK]
Hint: Print root value before recursive calls in preorder [OK]
Common Mistakes:
  • Printing after left subtree instead of before
  • Confusing preorder with inorder traversal
  • Ignoring base case for null nodes
5. You have a binary tree where some nodes have only one child. How does preorder traversal handle nodes with a missing left child?
Consider this tree:
    10
      \
      20
     /  \
   30    40

What is the preorder traversal output?
hard
A. 10 -> 40 -> 20 -> 30 -> null
B. 10 -> 20 -> 30 -> 40 -> null
C. 10 -> 20 -> 40 -> 30 -> null
D. 10 -> 30 -> 20 -> 40 -> null

Solution

  1. Step 1: Visit root node 10

    Start with root: 10
  2. Step 2: Check left child of 10

    Left child is missing, so skip to right child 20
  3. Step 3: Visit node 20 and its children

    Visit 20, then left child 30, then right child 40
  4. Final Answer:

    10 -> 20 -> 30 -> 40 -> null -> Option B
  5. Quick Check:

    Preorder visits root, left (if any), right = 10 -> 20 -> 30 -> 40 -> null [OK]
Hint: Skip missing children, visit existing nodes in preorder order [OK]
Common Mistakes:
  • Assuming missing left child means skip right child
  • Visiting children in wrong order
  • Confusing preorder with other 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