Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Tree Traversal Postorder Left Right Root in DSA Javascript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Postorder Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of the postorder traversal?
Given the binary tree below, what is the output of the postorder traversal (Left, Right, Root)?

Tree structure:
1
/ \
2 3
/ \
4 5
DSA Javascript
class Node {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

function postorder(root) {
  if (!root) return [];
  return [...postorder(root.left), ...postorder(root.right), root.value];
}

const root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);

console.log(postorder(root));
A[1, 2, 3, 4, 5]
B[2, 4, 5, 3, 1]
C[4, 5, 2, 3, 1]
D[4, 2, 5, 3, 1]
Attempts:
2 left
💡 Hint
Remember postorder means visit left subtree, then right subtree, then the root node.
❓ Predict Output
intermediate
2:00remaining
What is the postorder traversal output for this tree?
Consider this binary tree:

10
/ \
20 30
/ \
40 50

What is the postorder traversal output (Left, Right, Root)?
DSA Javascript
class Node {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

function postorder(root) {
  if (!root) return [];
  return [...postorder(root.left), ...postorder(root.right), root.value];
}

const root = new Node(10);
root.left = new Node(20);
root.right = new Node(30);
root.right.left = new Node(40);
root.right.right = new Node(50);

console.log(postorder(root));
A[20, 40, 50, 30, 10]
B[10, 20, 30, 40, 50]
C[40, 50, 30, 20, 10]
D[20, 30, 40, 50, 10]
Attempts:
2 left
💡 Hint
Postorder visits left subtree first, then right subtree, then root.
🧠 Conceptual
advanced
1:30remaining
Which statement about postorder traversal is true?
Choose the correct statement about postorder traversal of a binary tree.
APostorder traversal visits the root node before its children.
BPostorder traversal visits left subtree, then right subtree, then the root node.
CPostorder traversal visits nodes in the order: Right, Left, Root.
DPostorder traversal visits nodes in the order: Root, Left, Right.
Attempts:
2 left
💡 Hint
Think about when the root node is visited in postorder.
🔧 Debug
advanced
2:00remaining
Find the error in this postorder traversal code
The following code is intended to perform a postorder traversal of a binary tree and return an array of node values. What is the error?
DSA Javascript
function postorder(root) {
  if (!root) return [];
  return [root.value, ...postorder(root.left), ...postorder(root.right)];
}
AThere is no error; this is correct postorder traversal.
BThe function will cause a runtime error because of incorrect spread syntax.
CThe function will return an empty array for any input.
DThe root node is visited before its children, so this is preorder traversal, not postorder.
Attempts:
2 left
💡 Hint
Check the order in which root and children are visited.
🚀 Application
expert
1:30remaining
How many nodes are visited before the root in postorder traversal?
In a postorder traversal of a binary tree with 7 nodes, how many nodes are visited before the root node is visited?
A6
B7
C0
DDepends on the tree structure
Attempts:
2 left
💡 Hint
Postorder visits all children before the root.

Practice

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

Solution

  1. Step 1: Understand postorder traversal definition

    Postorder traversal visits the left subtree first, then the right subtree, and finally the root node.
  2. Step 2: Match the order with options

    Left subtree, Right subtree, Root node matches the order Left, Right, Root exactly.
  3. Final Answer:

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

    Postorder = Left, Right, Root [OK]
Hint: Remember: postorder ends with root node [OK]
Common Mistakes:
  • Confusing postorder with preorder or inorder
  • Visiting root node first instead of last
  • Swapping left and right subtree order
2. Which of the following is the correct syntax to perform a postorder traversal function call in JavaScript assuming postorder(node) is defined?
easy
A. console.log(node.value); postorder(node.left); postorder(node.right);
B. console.log(node.value); postorder(node.right); postorder(node.left);
C. postorder(node.right); postorder(node.left); console.log(node.value);
D. postorder(node.left); postorder(node.right); console.log(node.value);

Solution

  1. Step 1: Recall postorder traversal steps

    Postorder visits left subtree, then right subtree, then root node.
  2. Step 2: Check syntax order

    postorder(node.left); postorder(node.right); console.log(node.value); calls postorder on left, then right, then prints root value last, matching postorder.
  3. Final Answer:

    postorder(node.left); postorder(node.right); console.log(node.value); -> Option D
  4. Quick Check:

    Left, Right, Root call order = postorder(node.left); postorder(node.right); console.log(node.value); [OK]
Hint: Print root after left and right calls [OK]
Common Mistakes:
  • Printing root before recursive calls
  • Swapping left and right recursive calls
  • Missing recursive calls for subtrees
3. Given the binary tree below, what is the output of a postorder traversal?
    1
   / \
  2   3
 / \
4   5
medium
A. [1, 2, 3, 4, 5]
B. [4, 5, 2, 3, 1]
C. [2, 4, 5, 3, 1]
D. [4, 2, 5, 3, 1]

Solution

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

    Left subtree rooted at 2: postorder is left(4), right(5), root(2) -> [4, 5, 2]
  2. Step 2: Traverse right subtree and root

    Right subtree is node 3 -> [3]. Then root 1 last -> [1]. Combine: [4, 5, 2] + [3] + [1] = [4, 5, 2, 3, 1]
  3. Final Answer:

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

    Postorder = Left, Right, Root = [4,5,2,3,1] [OK]
Hint: Visit left subtree fully before right, then root [OK]
Common Mistakes:
  • Listing root before subtrees
  • Mixing up left and right subtree order
  • Confusing preorder or inorder output
4. The following JavaScript code attempts a postorder traversal but produces incorrect output. What is the error?
function postorder(node) {
  if (!node) return;
  console.log(node.value);
  postorder(node.left);
  postorder(node.right);
}
medium
A. The left subtree is visited after the right subtree
B. The function does not check if node is null
C. The root node is printed before its children, not after
D. The function is missing a return statement

Solution

  1. Step 1: Analyze print order in code

    The code prints node.value before recursive calls, so root prints first.
  2. Step 2: Compare with postorder definition

    Postorder requires printing root after left and right subtrees, so printing first is wrong.
  3. Final Answer:

    The root node is printed before its children, not after -> Option C
  4. Quick Check:

    Postorder prints root last, code prints root first [OK]
Hint: Print root after recursive calls for postorder [OK]
Common Mistakes:
  • Printing root before recursive calls
  • Ignoring base case for null nodes
  • Swapping left and right subtree calls
5. You want to collect all node values of a binary tree in postorder traversal into an array. Which code snippet correctly does this in JavaScript?
hard
A. function postorder(node, arr = []) { if (!node) return arr; postorder(node.left, arr); postorder(node.right, arr); arr.push(node.value); return arr; }
B. function postorder(node, arr = []) { if (!node) return arr; arr.push(node.value); postorder(node.left, arr); postorder(node.right, arr); return arr; }
C. function postorder(node, arr = []) { if (!node) return arr; postorder(node.right, arr); postorder(node.left, arr); arr.push(node.value); return arr; }
D. function postorder(node, arr = []) { if (!node) return arr; postorder(node.left, arr); arr.push(node.value); postorder(node.right, arr); return arr; }

Solution

  1. Step 1: Check traversal order in each snippet

    function postorder(node, arr = []) { if (!node) return arr; postorder(node.left, arr); postorder(node.right, arr); arr.push(node.value); return arr; } visits left subtree, then right subtree, then pushes root value last, matching postorder.
  2. Step 2: Verify array accumulation and return

    function postorder(node, arr = []) { if (!node) return arr; postorder(node.left, arr); postorder(node.right, arr); arr.push(node.value); return arr; } correctly passes and returns the array, accumulating values in postorder.
  3. Final Answer:

    Option A code snippet -> Option A
  4. Quick Check:

    Left, Right, Root with arr.push last = function postorder(node, arr = []) { if (!node) return arr; postorder(node.left, arr); postorder(node.right, arr); arr.push(node.value); return arr; } [OK]
Hint: Push root value after left and right recursive calls [OK]
Common Mistakes:
  • Pushing root value before recursive calls
  • Swapping left and right subtree calls
  • Not returning the array properly
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