📖 Scenario: You have a simple family tree where each person can have a left child and a right child. You want to visit each person in a special order: first the left child, then the person, then the right child. This is called inorder traversal.
🎯 Goal: Build a small tree using nodes, then write code to visit and print the nodes in inorder (left, root, right) order.
📋 What You'll Learn
Create a TreeNode class with value, left, and right properties
Create a tree with exactly 3 nodes: root with value 1, left child with value 2, right child with value 3
Write a function called inorderTraversal that visits nodes in left-root-right order
Print the values of nodes in inorder traversal separated by spaces
💡 Why This Matters
🌍 Real World
Tree traversal is used in many real-world tasks like searching family trees, organizing files, or evaluating expressions.
💼 Career
Understanding tree traversal is important for software developers working with data structures, databases, and algorithms.
Progress0 / 4 steps
1
Create TreeNode class and build the tree
Create a class called TreeNode with a constructor that takes a value (number) and sets left and right to null. Then create three nodes: root with value 1, root.left with value 2, and root.right with value 3.
DSA Typescript
Hint
Define the class with value, left, and right. Then create the root and assign left and right children.
2
Create an array to store traversal results
Create an empty array called result to store the values of nodes visited during inorder traversal.
DSA Typescript
Hint
Use const result: number[] = []; to create an empty array for storing values.
3
Write the inorder traversal function
Write a function called inorderTraversal that takes a node of type TreeNode | null. If the node is not null, first call inorderTraversal on node.left, then push node.value to result, then call inorderTraversal on node.right.
DSA Typescript
Hint
Use recursion: visit left child, then current node, then right child.
4
Run inorder traversal and print the result
Call inorderTraversal with root as argument. Then print the result array values joined by spaces using console.log(result.join(' ')).
DSA Typescript
Hint
Call the function with root and print the result array joined by spaces.
Practice
(1/5)
1. What is the order of nodes visited in an inorder traversal of a binary tree?
easy
A. Left subtree, Root, Right subtree
B. Root, Left subtree, Right subtree
C. Right subtree, Root, Left subtree
D. Root, Right subtree, Left subtree
Solution
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.
Step 2: Match the traversal order to options
Left subtree, Root, Right subtree correctly states the order as Left subtree, Root, Right subtree.
Final Answer:
Left subtree, Root, Right subtree -> Option A
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 TypeScript function signatures correctly represents an inorder traversal function for a binary tree node?
easy
A. function inorder(node: TreeNode): number[]
B. function inorder(node: TreeNode | null): void
C. function inorder(): void
D. function inorder(node: TreeNode | null): number
Solution
Step 1: Analyze function parameters and return type
An inorder traversal function typically takes a node or null as input and performs traversal, often printing or processing nodes without returning a value.
Step 2: Check options for correct signature
function inorder(node: TreeNode | null): void accepts a node or null and returns void, which fits traversal that prints or processes nodes.
Final Answer:
function inorder(node: TreeNode | null): void -> Option B
Quick Check:
Traversal function takes node or null, returns void [OK]
Hint: Traversal functions usually take node or null, return void [OK]
Common Mistakes:
Omitting null in parameter type
Returning incorrect types like number or array
Missing parameter in function signature
3. Given the following binary tree:
2
/ \
1 3
What is the output of inorder traversal printing node values?
medium
A. [2, 1, 3]
B. [3, 2, 1]
C. [1, 3, 2]
D. [1, 2, 3]
Solution
Step 1: Visualize the tree and inorder traversal
Inorder visits left subtree, root, then right subtree. For root 2, left child is 1, right child is 3.
Step 2: List nodes in inorder
Visit left: 1, then root: 2, then right: 3, so output is [1, 2, 3].
Final Answer:
[1, 2, 3] -> Option D
Quick Check:
Inorder of 2-node tree = [1, 2, 3] [OK]
Hint: Inorder prints nodes sorted for BST [OK]
Common Mistakes:
Printing root before left subtree
Swapping left and right subtree order
Confusing preorder or postorder output
4. Consider this TypeScript inorder traversal function:
function inorder(node: TreeNode | null): void {
if (node === null) return;
inorder(node.right);
console.log(node.val);
inorder(node.left);
}
What is the main problem with this code?
medium
A. It prints node values twice
B. It does not handle null nodes properly
C. It visits right subtree before left, so traversal order is incorrect
D. It causes infinite recursion
Solution
Step 1: Analyze traversal order in code
The function calls inorder on right subtree first, then prints root, then calls inorder on left subtree.
Step 2: Compare with correct inorder order
Correct inorder is left subtree, root, right subtree. This code reverses left and right, so order is wrong.
Final Answer:
It visits right subtree before left, so traversal order is incorrect -> Option C
Quick Check:
Inorder must visit left before right [OK]
Hint: Inorder must call left subtree before right [OK]
Common Mistakes:
Swapping left and right subtree calls
Forgetting base case for null
Printing before recursive calls
5. You have a binary tree where each node contains a number. You want to collect all node values in an array using inorder traversal. Which TypeScript code snippet correctly implements this?
hard
A. function inorder(node: TreeNode | null, arr: number[]): void {
if (!node) return;
inorder(node.left, arr);
arr.push(node.val);
inorder(node.right, arr);
}
B. function inorder(node: TreeNode | null, arr: number[]): void {
if (!node) return;
arr.push(node.val);
inorder(node.left, arr);
inorder(node.right, arr);
}
C. function inorder(node: TreeNode | null, arr: number[]): void {
if (!node) return;
inorder(node.right, arr);
arr.push(node.val);
inorder(node.left, arr);
}
D. function inorder(node: TreeNode | null): number[] {
if (!node) return [];
return [node.val].concat(inorder(node.left)).concat(inorder(node.right));
}
Solution
Step 1: Understand inorder traversal with array accumulation
We must visit left subtree, then root (push value), then right subtree, passing the same array to collect values.
Step 2: Check each option for correct order and array usage
function inorder(node: TreeNode | null, arr: number[]): void {
if (!node) return;
inorder(node.left, arr);
arr.push(node.val);
inorder(node.right, arr);
} correctly visits left, pushes root value, then visits right, using the same array.
Final Answer:
function inorder(node: TreeNode | null, arr: number[]): void {
if (!node) return;
inorder(node.left, arr);
arr.push(node.val);
inorder(node.right, arr);
} -> Option A
Quick Check:
Left, root, right with shared array [OK]
Hint: Push node value after left subtree call [OK]
Common Mistakes:
Pushing before left subtree traversal
Swapping left and right subtree calls
Returning new arrays instead of using passed array
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.