0
0
DSA Javascriptprogramming~20 mins

Maximum Width of Binary Tree in DSA Javascript - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Maximum Width Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Maximum Width Calculation
What is the output of the following code that calculates the maximum width of a binary tree?
DSA Javascript
class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}

function widthOfBinaryTree(root) {
  if (!root) return 0;
  let maxWidth = 0;
  let queue = [[root, 0]]; // node and index

  while (queue.length > 0) {
    const levelLength = queue.length;
    const levelIndices = queue.map(pair => pair[1]);
    const minIndex = levelIndices[0];
    const maxIndex = levelIndices[levelIndices.length - 1];
    maxWidth = Math.max(maxWidth, maxIndex - minIndex + 1);

    for (let i = 0; i < levelLength; i++) {
      const [node, index] = queue.shift();
      if (node.left) queue.push([node.left, 2 * (index - minIndex)]);
      if (node.right) queue.push([node.right, 2 * (index - minIndex) + 1]);
    }
  }
  return maxWidth;
}

// Tree structure:
//       1
//      / \
//     3   2
//    /     \
//   5       9
//  /         \
// 6           7

const root = new TreeNode(1,
  new TreeNode(3,
    new TreeNode(5,
      new TreeNode(6)
    )
  ),
  new TreeNode(2,
    null,
    new TreeNode(9,
      null,
      new TreeNode(7)
    )
  )
);

console.log(widthOfBinaryTree(root));
A4
B8
C5
D6
Attempts:
2 left
💡 Hint
Consider how the indices are assigned to nodes and how the width is calculated as the difference between max and min indices at each level.
Predict Output
intermediate
2:00remaining
Maximum Width for a Skewed Tree
What is the output of the code below for a skewed binary tree (all nodes only have a right child)?
DSA Javascript
class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}

function widthOfBinaryTree(root) {
  if (!root) return 0;
  let maxWidth = 0;
  let queue = [[root, 0]];

  while (queue.length > 0) {
    const levelLength = queue.length;
    const levelIndices = queue.map(pair => pair[1]);
    const minIndex = levelIndices[0];
    const maxIndex = levelIndices[levelIndices.length - 1];
    maxWidth = Math.max(maxWidth, maxIndex - minIndex + 1);

    for (let i = 0; i < levelLength; i++) {
      const [node, index] = queue.shift();
      if (node.left) queue.push([node.left, 2 * (index - minIndex)]);
      if (node.right) queue.push([node.right, 2 * (index - minIndex) + 1]);
    }
  }
  return maxWidth;
}

// Tree structure:
// 1 -> 2 -> 3 -> 4 (all right children)
const root = new TreeNode(1,
  null,
  new TreeNode(2,
    null,
    new TreeNode(3,
      null,
      new TreeNode(4)
    )
  )
);

console.log(widthOfBinaryTree(root));
A3
B2
C4
D1
Attempts:
2 left
💡 Hint
In a skewed tree, the width at each level is usually 1 because there is only one node per level.
🔧 Debug
advanced
2:00remaining
Identify the Error in Width Calculation
The following code attempts to calculate the maximum width of a binary tree but produces incorrect results. What is the main reason for the error?
DSA Javascript
function widthOfBinaryTree(root) {
  if (!root) return 0;
  let maxWidth = 0;
  let queue = [[root, 0]];

  while (queue.length > 0) {
    const levelLength = queue.length;
    const minIndex = queue[0][1];
    const maxIndex = queue[levelLength - 1][1];
    maxWidth = Math.max(maxWidth, maxIndex - minIndex + 1);

    for (let i = 0; i < levelLength; i++) {
      const [node, index] = queue.shift();
      if (node.left) queue.push([node.left, 2 * index]);
      if (node.right) queue.push([node.right, 2 * index + 1]);
    }
  }
  return maxWidth;
}
AThe maxWidth calculation should use multiplication instead of subtraction.
BThe queue is not initialized properly with root and index 1 instead of 0.
CIndices are not normalized by subtracting minIndex, causing overflow and incorrect width.
DThe function does not handle null nodes in the queue, causing runtime errors.
Attempts:
2 left
💡 Hint
Check how indices are assigned to child nodes relative to the current level's minimum index.
🧠 Conceptual
advanced
1:30remaining
Why Use Index Normalization in Maximum Width Calculation?
Why is it important to normalize indices by subtracting the minimum index at each level when calculating the maximum width of a binary tree?
ATo prevent integer overflow and keep indices small for accurate width calculation.
BTo ensure the tree is balanced before calculating width.
CTo sort the nodes at each level by their values.
DTo convert the tree into a linked list for easier traversal.
Attempts:
2 left
💡 Hint
Think about what happens to indices as the tree depth increases.
🚀 Application
expert
2:30remaining
Maximum Width of Binary Tree with Missing Nodes
Given the following binary tree, what is the maximum width calculated by the standard algorithm that uses index normalization? // Tree structure: // 1 // / \ // 2 3 // \ \ // 5 7 // / \ // 9 8
DSA Javascript
class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}

function widthOfBinaryTree(root) {
  if (!root) return 0;
  let maxWidth = 0;
  let queue = [[root, 0]];

  while (queue.length > 0) {
    const levelLength = queue.length;
    const minIndex = queue[0][1];
    const maxIndex = queue[levelLength - 1][1];
    maxWidth = Math.max(maxWidth, maxIndex - minIndex + 1);

    for (let i = 0; i < levelLength; i++) {
      const [node, index] = queue.shift();
      if (node.left) queue.push([node.left, 2 * (index - minIndex)]);
      if (node.right) queue.push([node.right, 2 * (index - minIndex) + 1]);
    }
  }
  return maxWidth;
}

const root = new TreeNode(1,
  new TreeNode(2,
    null,
    new TreeNode(5,
      new TreeNode(9)
    )
  ),
  new TreeNode(3,
    null,
    new TreeNode(7,
      null,
      new TreeNode(8)
    )
  )
);

console.log(widthOfBinaryTree(root));
A6
B5
C8
D7
Attempts:
2 left
💡 Hint
Consider the indices assigned to nodes at the third level and how gaps affect width.