Bird
Raised Fist0
DSA Typescriptprogramming~10 mins

Tree Traversal Preorder Root Left Right in DSA Typescript - Execution Trace

Choose your learning style10 modes available
Concept Flow - Tree Traversal Preorder Root Left Right
Start at Root Node
↓
Visit Node: Process Data
↓
Traverse Left Subtree
↓
Traverse Right Subtree
↓
Done
Start at the root, visit it, then recursively do the same for left subtree, then right subtree.
Execution Sample
DSA Typescript
function preorder(node) {
  if (!node) return;
  console.log(node.val);
  preorder(node.left);
  preorder(node.right);
}
Prints nodes in preorder: root first, then left subtree, then right subtree.
Execution Table
StepOperationNode VisitedLeft/RightTree State (Visual)
1Visit rootARootA ├─ B └─ C
2Traverse left subtreeBLeft of AA ├─ B │ ├─ D │ └─ E └─ C
3Traverse left subtreeDLeft of BA ├─ B │ ├─ D │ └─ E └─ C
4Left child nullnullLeft of DNo change
5Right child nullnullRight of DNo change
6Traverse right subtreeERight of BA ├─ B │ ├─ D │ └─ E └─ C
7Left child nullnullLeft of ENo change
8Right child nullnullRight of ENo change
9Traverse right subtreeCRight of AA ├─ B │ ├─ D │ └─ E └─ C └─ F
10Left child nullnullLeft of CNo change
11Traverse right subtreeFRight of CA ├─ B │ ├─ D │ └─ E └─ C └─ F
12Left child nullnullLeft of FNo change
13Right child nullnullRight of FNo change
14Traversal completenullNoneTraversal done
💡 All nodes visited in preorder: root, left subtree, right subtree.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 6After Step 9After Step 11Final
Current NodeAABDECFnull
Call Stack[][preorder(A)][preorder(B), preorder(A)][preorder(D), preorder(B), preorder(A)][preorder(E), preorder(B), preorder(A)][preorder(C), preorder(A)][preorder(F), preorder(C), preorder(A)][]
Output Sequence[][A][A, B][A, B, D][A, B, D, E][A, B, D, E, C][A, B, D, E, C, F][A, B, D, E, C, F]
Key Moments - 3 Insights
Why do we print the node value before traversing left and right children?
Because preorder traversal visits the root node first, then left subtree, then right subtree, as shown in execution_table steps 1, 2, and 9.
What happens when a node has no left or right child?
The traversal calls preorder with null, which returns immediately without action, as seen in steps 4, 5, 7, 8, 10, 12, and 13.
How does the call stack change during traversal?
Each recursive call adds a function to the stack; when a node is fully processed, its call returns and is removed, shown in variable_tracker's Call Stack column.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, which node is currently visited?
ANode E
BNode B
CNode D
DNode C
💡 Hint
Check the 'Node Visited' column at step 3 in execution_table.
At which step does the traversal visit the right child of node A?
AStep 2
BStep 9
CStep 6
DStep 11
💡 Hint
Look for 'Traverse right subtree' operation with node C in execution_table.
If node B had no left child, which step would be skipped?
AStep 4
BStep 6
CStep 3
DStep 7
💡 Hint
Step 4 is visiting left child null of D; if no left child of B, step 4 would be skipped.
Concept Snapshot
Preorder Tree Traversal:
- Visit root node first
- Recursively traverse left subtree
- Recursively traverse right subtree
- Uses recursion and call stack
- Output order: Root, Left, Right
Full Transcript
Preorder traversal visits nodes starting from the root, then left subtree, then right subtree. The code recursively visits each node, printing its value before going deeper. When a node is null, the recursion returns immediately. The call stack grows with each recursive call and shrinks as calls return. The output sequence follows the order nodes are visited.

Practice

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

Solution

  1. Step 1: Understand preorder traversal definition

    Preorder traversal visits the root node first, then recursively visits the left subtree, followed by the right subtree.
  2. Step 2: Match the order with options

    The order Root, Left, Right matches the preorder traversal definition exactly.
  3. Final Answer:

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

    Preorder = Root, Left, Right [OK]
Hint: Preorder always starts with the root node first [OK]
Common Mistakes:
  • Confusing preorder with inorder or postorder
  • Visiting left or right before root
  • Mixing up traversal orders
2. Which of the following TypeScript function signatures correctly represents a preorder traversal function for a binary tree node?
easy
A. function preorder(node: TreeNode): number[]
B. function preorder(node: TreeNode | null): void
C. function preorder(): TreeNode
D. function preorder(node: TreeNode, result: number[]): number

Solution

  1. Step 1: Analyze function parameters and return type

    A preorder traversal function typically takes a node (or null) and returns void if it prints or processes nodes directly.
  2. Step 2: Check each option

    function preorder(node: TreeNode | null): void accepts a node or null and returns void, which fits a traversal that processes nodes without returning a value.
  3. Final Answer:

    function preorder(node: TreeNode | null): void -> Option B
  4. Quick Check:

    Traversal function signature with node or null and void return [OK]
Hint: Traversal functions usually take a node and return void or array [OK]
Common Mistakes:
  • Missing null in node parameter type
  • Wrong return type for traversal
  • Incorrect number of parameters
3. Given the following binary tree:
    1
   / \
  2   3
 / \
4   5

What is the output of a preorder traversal (Root, Left, Right)?
medium
A. [4, 2, 5, 1, 3]
B. [2, 4, 5, 1, 3]
C. [1, 2, 4, 5, 3]
D. [1, 3, 2, 4, 5]

Solution

  1. Step 1: Start at root node 1

    Preorder visits root first: 1
  2. Step 2: Traverse left subtree of 1

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

    Visit node 3: 3
  4. Final Answer:

    [1, 2, 4, 5, 3] -> Option C
  5. Quick Check:

    Preorder = Root, Left, Right = [1, 2, 4, 5, 3] [OK]
Hint: Visit root first, then left subtree, then right subtree [OK]
Common Mistakes:
  • Visiting left subtree after right subtree
  • Starting traversal from left child instead of root
  • Mixing preorder with inorder or postorder
4. Consider this TypeScript preorder traversal function:
function preorder(node: TreeNode | null): void {
  if (node === null) return;
  preorder(node.left);
  console.log(node.val);
  preorder(node.right);
}

What is the error in this code?
medium
A. It does not handle null nodes
B. It will cause infinite recursion
C. It prints nodes in postorder
D. It visits nodes in inorder, not preorder

Solution

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

    The function first calls preorder on left child, then prints current node, then calls preorder on right child.
  2. Step 2: Compare with preorder definition

    Preorder should print the node first, then traverse left and right. This code prints after left subtree, so it is inorder traversal.
  3. Final Answer:

    It visits nodes in inorder, not preorder -> Option D
  4. Quick Check:

    Print before recursive calls = preorder; here print is in middle [OK]
Hint: Print node value before recursive calls for preorder [OK]
Common Mistakes:
  • Printing node after left subtree instead of before
  • Confusing traversal orders
  • Missing base case for null
5. You want to collect all node values of a binary tree in preorder traversal into an array. Which TypeScript function correctly implements this?
hard
A. function preorder(node: TreeNode | null, result: number[] = []): number[] { if (!node) return result; result.push(node.val); preorder(node.left, result); preorder(node.right, result); return result; }
B. function preorder(node: TreeNode | null): number[] { if (!node) return []; return [...preorder(node.left), node.val, ...preorder(node.right)]; }
C. function preorder(node: TreeNode | null): number[] { if (!node) return []; return [...preorder(node.left), ...preorder(node.right), node.val]; }
D. function preorder(node: TreeNode | null): number[] { if (!node) return []; return [node.val, ...preorder(node.right), ...preorder(node.left)]; }

Solution

  1. Step 1: Understand preorder traversal collection

    Preorder visits root first, then left subtree, then right subtree, collecting values in order.
  2. Step 2: Check each function's order and correctness

    function preorder(node: TreeNode | null, result: number[] = []): number[] { if (!node) return result; result.push(node.val); preorder(node.left, result); preorder(node.right, result); return result; } pushes node.val first, then recursively collects left and right, returning the result array correctly.
  3. Final Answer:

    function preorder(node: TreeNode | null, result: number[] = []): number[] { if (!node) return result; result.push(node.val); preorder(node.left, result); preorder(node.right, result); return result; } -> Option A
  4. Quick Check:

    Push root first, then left and right recursively [OK]
Hint: Push root value before recursive calls to left and right [OK]
Common Mistakes:
  • Collecting left subtree before root
  • Mixing left and right subtree order
  • Returning new arrays instead of accumulating
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