Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Diameter of Binary Tree in DSA Javascript - Practice Problems & Challenges

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

function diameterOfBinaryTree(root) {
  let diameter = 0;
  function depth(node) {
    if (!node) return 0;
    const left = depth(node.left);
    const right = depth(node.right);
    diameter = Math.max(diameter, left + right);
    return Math.max(left, right) + 1;
  }
  depth(root);
  return diameter;
}

const root = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3));
console.log(diameterOfBinaryTree(root));
A2
B5
C4
D3
Attempts:
2 left
💡 Hint
The diameter is the longest path between any two nodes, counting edges.
❓ Predict Output
intermediate
2:00remaining
Diameter of a skewed binary tree
What is the output of the diameterOfBinaryTree function for this skewed tree?
DSA Javascript
const root = new TreeNode(1, new TreeNode(2, new TreeNode(3, new TreeNode(4))));
console.log(diameterOfBinaryTree(root));
A3
B4
C0
D1
Attempts:
2 left
💡 Hint
In a skewed tree, the diameter is the number of edges in the longest chain.
🔧 Debug
advanced
2:00remaining
Identify the error in this diameter calculation code
What error will this code produce when calculating the diameter of a binary tree?
DSA Javascript
function diameterOfBinaryTree(root) {
  let diameter = 0;
  function depth(node) {
    if (node === null) return 0;
    const left = depth(node.left);
    const right = depth(node.right);
    diameter = Math.max(diameter, left + right + 1);
    return Math.max(left, right) + 1;
  }
  depth(root);
  return diameter;
}
ATypeError because node.left might be undefined
BSyntaxError due to missing return statement
CThe diameter is off by 1 (returns number of nodes, not edges)
DNo error, returns correct diameter
Attempts:
2 left
💡 Hint
Diameter counts edges, but code adds 1 extra edge.
🧠 Conceptual
advanced
2:00remaining
Understanding diameter calculation logic
Why does the diameter calculation use the sum of left and right subtree depths at each node?
ABecause the longest path passes through the current node connecting left and right subtrees
BBecause the diameter is the maximum depth of either subtree alone
CBecause the diameter is the sum of all nodes in the tree
DBecause the diameter is the height of the tree plus one
Attempts:
2 left
💡 Hint
Think about the longest path crossing the root of a subtree.
❓ Predict Output
expert
2:00remaining
Diameter of a complex binary tree with multiple branches
What is the output of the diameterOfBinaryTree function for this tree?
DSA Javascript
const root = new TreeNode(1,
  new TreeNode(2,
    new TreeNode(4,
      new TreeNode(7),
      null
    ),
    new TreeNode(5)
  ),
  new TreeNode(3,
    null,
    new TreeNode(6,
      new TreeNode(8),
      new TreeNode(9)
    )
  )
);
console.log(diameterOfBinaryTree(root));
A4
B6
C7
D5
Attempts:
2 left
💡 Hint
Trace the longest path between two leaves in different branches.

Practice

(1/5)
1. What does the diameter of a binary tree represent?
easy
A. The longest path between any two nodes in the tree
B. The height of the tree
C. The number of leaf nodes
D. The total number of nodes in the tree

Solution

  1. Step 1: Understand the diameter concept

    The diameter is the longest path between any two nodes, which may or may not pass through the root.
  2. Step 2: Differentiate from height and node count

    Height is the longest path from root to leaf, and node count is total nodes, both different from diameter.
  3. Final Answer:

    The longest path between any two nodes in the tree -> Option A
  4. Quick Check:

    Diameter = Longest path between nodes [OK]
Hint: Diameter is longest path, not just height or node count [OK]
Common Mistakes:
  • Confusing diameter with tree height
  • Thinking diameter counts nodes instead of edges
  • Assuming diameter must pass through root
2. Which of the following JavaScript function signatures is correct for computing the diameter of a binary tree node?
easy
A. function diameterTree() {}
B. function diameter(root, tree) {}
C. function binaryTreeDiameter(node, root) {}
D. function diameterOfBinaryTree(root) {}

Solution

  1. Step 1: Check common parameter naming

    The function usually takes the root node as input, so a single parameter named root is standard.
  2. Step 2: Validate function signature correctness

    function diameterOfBinaryTree(root) {} uses a clear, single parameter 'root' and a descriptive function name, matching common practice.
  3. Final Answer:

    function diameterOfBinaryTree(root) {} -> Option D
  4. Quick Check:

    Correct function signature uses root parameter [OK]
Hint: Function usually takes root node as single parameter [OK]
Common Mistakes:
  • Using multiple unrelated parameters
  • Incorrect or unclear function names
  • Missing parameters for the tree root
3. Given the following binary tree structure and code, what is the diameter of the tree?
class TreeNode {
  constructor(val, left = null, right = null) {
    this.val = val;
    this.left = left;
    this.right = right;
  }
}

const root = new TreeNode(1,
  new TreeNode(2,
    new TreeNode(4),
    new TreeNode(5)
  ),
  new TreeNode(3)
);

function diameterOfBinaryTree(root) {
  let diameter = 0;
  function depth(node) {
    if (!node) return 0;
    const left = depth(node.left);
    const right = depth(node.right);
    diameter = Math.max(diameter, left + right);
    return Math.max(left, right) + 1;
  }
  depth(root);
  return diameter;
}

console.log(diameterOfBinaryTree(root));
medium
A. 4
B. 3
C. 2
D. 5

Solution

  1. Step 1: Analyze the tree structure

    The tree has root 1, left subtree with nodes 2,4,5 and right subtree with node 3. The longest path is from node 4 to node 3 through 2 and 1 (4->2->1->3), which has length 3 edges.
  2. Step 2: Trace the code logic

    The code calculates diameter as max sum of left and right depths at each node. At node 2, left and right depths are 1 each, so diameter updates to 2. At root, left depth is 2, right depth is 1, so diameter updates to 3.
  3. Final Answer:

    3 -> Option B
  4. Quick Check:

    Longest path edges = 3 [OK]
Hint: Diameter = max sum of left and right subtree depths [OK]
Common Mistakes:
  • Counting nodes instead of edges for diameter
  • Ignoring paths not passing through root
  • Misreading tree structure
4. The following code attempts to compute the diameter of a binary tree but returns incorrect results. What is the bug?
function diameterOfBinaryTree(root) {
  let diameter = 0;
  function depth(node) {
    if (!node) return 0;
    const left = depth(node.left);
    const right = depth(node.right);
    diameter = Math.max(diameter, left * right);
    return Math.max(left, right) + 1;
  }
  depth(root);
  return diameter;
}
medium
A. Using multiplication instead of addition for diameter update
B. Returning max depth instead of sum of depths
C. Not handling null nodes correctly
D. Missing base case for leaf nodes

Solution

  1. Step 1: Identify diameter update logic

    The code updates diameter using left * right, which multiplies depths instead of adding them.
  2. Step 2: Correct diameter calculation

    Diameter should be updated with left + right, representing the longest path through the node.
  3. Final Answer:

    Using multiplication instead of addition for diameter update -> Option A
  4. Quick Check:

    Diameter update uses addition, not multiplication [OK]
Hint: Diameter update = left depth + right depth, not multiplication [OK]
Common Mistakes:
  • Multiplying depths instead of adding
  • Confusing depth return with diameter update
  • Ignoring base case for null nodes
5. You want to find the diameter of a binary tree but also return the path nodes that form this diameter. Which approach correctly extends the diameter calculation to return the path?
hard
A. Use breadth-first search to find the longest path from root to any leaf
B. Only compute the height of the tree and return the nodes at the deepest level
C. Track left and right subtree depths and their paths; update diameter and store combined path when a longer diameter is found
D. Count total nodes and return all leaf nodes as the diameter path

Solution

  1. Step 1: Understand diameter path requirements

    Diameter path is the longest path between any two nodes, so we must track paths from left and right subtrees.
  2. Step 2: Extend depth function to track paths

    Along with depths, store paths for left and right subtrees. When diameter updates, combine these paths to form the diameter path.
  3. Step 3: Reject incorrect approaches

    Height alone or BFS from root won't find longest path between any two nodes. Counting leaf nodes is unrelated.
  4. Final Answer:

    Track left and right subtree depths and their paths; update diameter and store combined path when a longer diameter is found -> Option C
  5. Quick Check:

    Track depths and paths to get diameter path [OK]
Hint: Store paths with depths; update when diameter increases [OK]
Common Mistakes:
  • Only tracking height or BFS from root
  • Ignoring path storage during recursion
  • Assuming diameter path is always root to leaf
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