Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Boundary Traversal of Binary Tree in DSA Javascript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Boundary Traversal Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Boundary Traversal on a Simple Binary Tree
What is the output of the boundary traversal for the given binary tree?
DSA Javascript
class Node {
  constructor(data) {
    this.data = data;
    this.left = null;
    this.right = null;
  }
}

function boundaryTraversal(root) {
  if (!root) return [];
  const result = [];

  function isLeaf(node) {
    return !node.left && !node.right;
  }

  function addLeftBoundary(node) {
    let curr = node.left;
    while (curr) {
      if (!isLeaf(curr)) result.push(curr.data);
      if (curr.left) curr = curr.left;
      else curr = curr.right;
    }
  }

  function addLeaves(node) {
    if (isLeaf(node)) {
      result.push(node.data);
      return;
    }
    if (node.left) addLeaves(node.left);
    if (node.right) addLeaves(node.right);
  }

  function addRightBoundary(node) {
    let curr = node.right;
    const temp = [];
    while (curr) {
      if (!isLeaf(curr)) temp.push(curr.data);
      if (curr.right) curr = curr.right;
      else curr = curr.left;
    }
    for (let i = temp.length - 1; i >= 0; i--) {
      result.push(temp[i]);
    }
  }

  if (!isLeaf(root)) result.push(root.data);
  addLeftBoundary(root);
  addLeaves(root);
  addRightBoundary(root);

  return result;
}

// Tree construction
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);
root.right.left = new Node(6);
root.right.right = new Node(7);

console.log(boundaryTraversal(root));
A[1, 2, 4, 5, 6, 7, 3]
B[1, 2, 4, 5, 7, 6, 3]
C[1, 2, 4, 5, 6, 3, 7]
D[1, 4, 5, 6, 7, 2, 3]
Attempts:
2 left
💡 Hint
Remember to include left boundary (excluding leaves), all leaves, then right boundary in reverse order.
❓ Predict Output
intermediate
2:00remaining
Boundary Traversal Output for Left Skewed Tree
What will be the output of the boundary traversal for this left skewed binary tree?
DSA Javascript
class Node {
  constructor(data) {
    this.data = data;
    this.left = null;
    this.right = null;
  }
}

function boundaryTraversal(root) {
  if (!root) return [];
  const result = [];

  function isLeaf(node) {
    return !node.left && !node.right;
  }

  function addLeftBoundary(node) {
    let curr = node.left;
    while (curr) {
      if (!isLeaf(curr)) result.push(curr.data);
      if (curr.left) curr = curr.left;
      else curr = curr.right;
    }
  }

  function addLeaves(node) {
    if (isLeaf(node)) {
      result.push(node.data);
      return;
    }
    if (node.left) addLeaves(node.left);
    if (node.right) addLeaves(node.right);
  }

  function addRightBoundary(node) {
    let curr = node.right;
    const temp = [];
    while (curr) {
      if (!isLeaf(curr)) temp.push(curr.data);
      if (curr.right) curr = curr.right;
      else curr = curr.left;
    }
    for (let i = temp.length - 1; i >= 0; i--) {
      result.push(temp[i]);
    }
  }

  if (!isLeaf(root)) result.push(root.data);
  addLeftBoundary(root);
  addLeaves(root);
  addRightBoundary(root);

  return result;
}

// Left skewed tree
const root = new Node(10);
root.left = new Node(20);
root.left.left = new Node(30);
root.left.left.left = new Node(40);

console.log(boundaryTraversal(root));
A[10, 40, 30, 20]
B[10, 20, 30]
C[40, 30, 20, 10]
D[10, 20, 30, 40]
Attempts:
2 left
💡 Hint
In a left skewed tree, left boundary and leaves overlap.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Boundary Traversal Code
The following code attempts to perform boundary traversal but produces incorrect output. What is the bug?
DSA Javascript
function addRightBoundary(node) {
  let curr = node.right;
  const temp = [];
  while (curr) {
    if (!isLeaf(curr)) temp.push(curr.data);
    if (curr.left) curr = curr.left;
    else curr = curr.right;
  }
  for (let i = temp.length - 1; i >= 0; i--) {
    result.push(temp[i]);
  }
}
AThe function should start from node.left instead of node.right.
BThe traversal of right boundary should prioritize right child first, not left child.
CThe temp array should be reversed before pushing to result, but it is not reversed.
DThe function should add leaves inside the loop, not outside.
Attempts:
2 left
💡 Hint
Check the order of child traversal in right boundary collection.
🧠 Conceptual
advanced
1:30remaining
Understanding Leaf Node Identification in Boundary Traversal
In boundary traversal, why is it important to check if a node is a leaf before adding it to the left or right boundary?
ATo avoid adding leaf nodes twice since leaves are added separately in the traversal.
BBecause leaf nodes do not belong to the boundary of the tree.
CTo ensure leaf nodes are only added in the right boundary traversal.
DTo skip leaf nodes entirely from the traversal.
Attempts:
2 left
💡 Hint
Think about how leaves are handled separately in the traversal.
❓ Predict Output
expert
3:00remaining
Boundary Traversal Output for Complex Tree with Missing Children
What is the output of the boundary traversal for the following binary tree?
DSA Javascript
class Node {
  constructor(data) {
    this.data = data;
    this.left = null;
    this.right = null;
  }
}

function boundaryTraversal(root) {
  if (!root) return [];
  const result = [];

  function isLeaf(node) {
    return !node.left && !node.right;
  }

  function addLeftBoundary(node) {
    let curr = node.left;
    while (curr) {
      if (!isLeaf(curr)) result.push(curr.data);
      if (curr.left) curr = curr.left;
      else curr = curr.right;
    }
  }

  function addLeaves(node) {
    if (isLeaf(node)) {
      result.push(node.data);
      return;
    }
    if (node.left) addLeaves(node.left);
    if (node.right) addLeaves(node.right);
  }

  function addRightBoundary(node) {
    let curr = node.right;
    const temp = [];
    while (curr) {
      if (!isLeaf(curr)) temp.push(curr.data);
      if (curr.right) curr = curr.right;
      else curr = curr.left;
    }
    for (let i = temp.length - 1; i >= 0; i--) {
      result.push(temp[i]);
    }
  }

  if (!isLeaf(root)) result.push(root.data);
  addLeftBoundary(root);
  addLeaves(root);
  addRightBoundary(root);

  return result;
}

// Complex tree
const root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.right = new Node(4);
root.left.right.left = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
root.right.right.left = new Node(8);

console.log(boundaryTraversal(root));
A[1, 2, 4, 5, 6, 7, 3, 8]
B[1, 2, 5, 4, 6, 8, 7, 3]
C[1, 2, 4, 5, 6, 8, 7, 3]
D[1, 2, 4, 5, 6, 7, 8, 3]
Attempts:
2 left
💡 Hint
Remember to add left boundary excluding leaves, then all leaves, then right boundary in reverse order.

Practice

(1/5)
1. What is the main purpose of Boundary Traversal in a binary tree?
easy
A. To print all leaf nodes only
B. To print all nodes on the boundary in an anti-clockwise direction
C. To print nodes level by level
D. To print nodes in in-order traversal

Solution

  1. Step 1: Understand boundary traversal definition

    Boundary traversal prints nodes on the edges of the tree, including left boundary, leaves, and right boundary.
  2. Step 2: Compare options with definition

    Only To print all nodes on the boundary in an anti-clockwise direction describes printing all boundary nodes in anti-clockwise order.
  3. Final Answer:

    To print all nodes on the boundary in an anti-clockwise direction -> Option B
  4. Quick Check:

    Boundary traversal = print boundary nodes anti-clockwise [OK]
Hint: Boundary traversal prints edges and leaves anti-clockwise [OK]
Common Mistakes:
  • Confusing boundary traversal with leaf node traversal
  • Thinking it prints nodes level-wise
  • Mixing it with in-order traversal
2. Which of the following is the correct way to start the boundary traversal function in JavaScript?
easy
A. function boundaryTraversal(root) { console.log(root.right); }
B. function boundaryTraversal() { return root; }
C. function boundaryTraversal(root) { if (!root) return []; }
D. function boundaryTraversal(root) { return root.left; }

Solution

  1. Step 1: Check function signature and base case

    The function should accept root and handle empty tree by returning empty array.
  2. Step 2: Validate options

    function boundaryTraversal(root) { if (!root) return []; } correctly defines function with root parameter and returns empty array if root is null.
  3. Final Answer:

    function boundaryTraversal(root) { if (!root) return []; } -> Option C
  4. Quick Check:

    Function starts with root check and empty return [OK]
Hint: Always check for empty tree at start of traversal function [OK]
Common Mistakes:
  • Omitting root parameter
  • Not handling empty tree
  • Returning wrong values at start
3. Given the binary tree:
      1
     / \
    2   3
   / \   \
  4   5   6
     / \  /
    7  8 9

What is the output of boundary traversal (anti-clockwise)?
medium
A. [1, 2, 4, 7, 8, 5, 9, 6, 3]
B. [1, 2, 4, 7, 8, 9, 6, 3, 5]
C. [1, 2, 4, 5, 7, 8, 9, 6, 3]
D. [1, 2, 4, 7, 8, 9, 6, 3]

Solution

  1. Step 1: Identify left boundary nodes

    Left boundary (excluding leaves): 1, 2
  2. Step 2: Identify leaf nodes left to right

    Leaves: 4, 7, 8, 9, 6
  3. Step 3: Identify right boundary nodes bottom-up excluding leaves

    Right boundary: 3
  4. Step 4: Combine in anti-clockwise order

    Boundary traversal: 1 (root), 2 (left boundary), 4 (leaf), 7, 8, 9, 6 (leaf), 3 (right boundary)
  5. Final Answer:

    [1, 2, 4, 7, 8, 9, 6, 3] -> Option D
  6. Quick Check:

    Boundary nodes combined anti-clockwise = [1, 2, 4, 7, 8, 9, 6, 3] [OK]
Hint: List left boundary, leaves, then right boundary reversed [OK]
Common Mistakes:
  • Including internal nodes as leaves
  • Adding right boundary leaves twice
  • Wrong order of nodes
4. Consider this code snippet for boundary traversal in JavaScript:
function printLeaves(node, result) {
  if (!node) return;
  if (!node.left && !node.right) {
    result.push(node.data);
  }
  printLeaves(node.left, result);
  printLeaves(node.right, result);
}

What is the bug in this code?
medium
A. It visits leaves in left to right order correctly
B. It pushes non-leaf nodes into result
C. It visits leaves in wrong order (right before left)
D. It does not check for null node before recursion

Solution

  1. Step 1: Analyze leaf detection and recursion order

    Code checks if node is leaf and pushes data, then recursively visits left then right child.
  2. Step 2: Verify leaf order correctness

    Visiting left subtree before right ensures leaves are collected left to right.
  3. Step 3: Check for bugs

    No bug found; code correctly collects leaves in left to right order.
  4. Final Answer:

    It visits leaves in left to right order correctly -> Option A
  5. Quick Check:

    Leaf nodes collected left to right = It visits leaves in left to right order correctly [OK]
Hint: Left subtree first ensures left-to-right leaf order [OK]
Common Mistakes:
  • Thinking recursion order is reversed
  • Assuming non-leaf nodes are pushed
  • Missing base case check
5. You want to perform boundary traversal on a binary tree but exclude all leaf nodes that have even values. Which approach correctly adapts the traversal?
hard
A. Modify leaf collection to skip leaves with even values during traversal
B. Skip left and right boundary nodes if they are even
C. Only collect leaves and ignore boundaries
D. Collect all nodes and filter even leaves after traversal

Solution

  1. Step 1: Understand boundary traversal parts

    Boundary traversal includes left boundary, leaves, and right boundary.
  2. Step 2: Identify where to exclude even leaves

    Only leaf nodes need filtering; boundaries remain unchanged.
  3. Step 3: Adapt leaf collection function

    Modify leaf collection to check leaf value and skip if even.
  4. Final Answer:

    Modify leaf collection to skip leaves with even values during traversal -> Option A
  5. Quick Check:

    Filter leaves during traversal, not boundaries [OK]
Hint: Filter leaves during leaf collection step only [OK]
Common Mistakes:
  • Filtering boundary nodes incorrectly
  • Filtering after traversal causing extra work
  • Ignoring leaf filtering altogether
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