Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Diameter of Binary Tree in DSA Typescript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Diameter of Binary Tree
O(n)
Understanding Time Complexity

We want to understand how long it takes to find the diameter of a binary tree.

The question is: how does the time grow as the tree gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


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

This code finds the longest path between any two nodes in a binary tree by calculating depths recursively.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Recursive calls to visit each node once.
  • How many times: Each node is visited exactly one time.
How Execution Grows With Input

As the tree grows, the function visits every node once to calculate depths.

Input Size (n)Approx. Operations
10About 10 visits
100About 100 visits
1000About 1000 visits

Pattern observation: The number of operations grows directly with the number of nodes.

Final Time Complexity

Time Complexity: O(n)

This means the time to find the diameter grows linearly with the number of nodes in the tree.

Common Mistake

[X] Wrong: "The function calls depth multiple times per node, so it must be more than linear."

[OK] Correct: Each node is visited once because the recursive calls do not repeat work; results are combined on the way back.

Interview Connect

Understanding this helps you explain how recursion can efficiently solve tree problems by visiting nodes once.

Self-Check

"What if we changed the code to calculate depth separately for left and right subtrees multiple times? How would the time complexity change?"

Practice

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

Solution

  1. Step 1: Understand the diameter definition

    The diameter is the longest path between any two nodes, not just from root to leaf.
  2. Step 2: Differentiate from other tree properties

    Height is longest root-to-leaf path, number of nodes counts all nodes, leaves count only leaf nodes.
  3. Final Answer:

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

    Diameter = longest path between nodes [OK]
Hint: Diameter is longest path between any two nodes, not just height [OK]
Common Mistakes:
  • Confusing diameter with tree height
  • Thinking diameter counts nodes instead of edges
  • Assuming diameter is from root only
2. Which TypeScript function signature correctly represents a function to compute the diameter of a binary tree node?
easy
A. function diameter(root: TreeNode | null): number
B. function diameter(root: number): TreeNode
C. function diameter(root: TreeNode): void
D. function diameter(): number

Solution

  1. Step 1: Identify input and output types

    The function takes a TreeNode or null and returns a number representing diameter length.
  2. Step 2: Match correct signature

    function diameter(root: TreeNode | null): number matches input type TreeNode|null and returns number, others mismatch input/output.
  3. Final Answer:

    function diameter(root: TreeNode | null): number -> Option A
  4. Quick Check:

    Input: TreeNode|null, Output: number [OK]
Hint: Diameter function inputs root node, returns number length [OK]
Common Mistakes:
  • Using wrong input type like number instead of TreeNode
  • Returning void instead of number
  • Missing null option for empty tree
3. What is the diameter of the following binary tree?
    1
   / \
  2   3
 / 
4  
medium
A. 2
B. 3
C. 4
D. 1

Solution

  1. Step 1: Identify longest path in tree

    Longest path is from node 4 to node 3 passing through 2 and 1, length 3 edges.
  2. Step 2: Count edges in longest path

    Path 4 -> 2 -> 1 -> 3 has 3 edges, so diameter is 3.
  3. Final Answer:

    3 -> Option B
  4. Quick Check:

    Longest path edges = 3 [OK]
Hint: Count edges on longest path between any two nodes [OK]
Common Mistakes:
  • Counting nodes instead of edges
  • Choosing height instead of diameter
  • Ignoring path through root
4. Given this TypeScript code snippet to compute diameter, what is the error?
function diameter(root: TreeNode | null): number {
  let maxDiameter = 0;
  function depth(node: TreeNode | null): number {
    if (!node) return 0;
    const left = depth(node.left);
    const right = depth(node.right);
    maxDiameter = Math.max(maxDiameter, left + right + 1);
    return Math.max(left, right) + 1;
  }
  depth(root);
  return maxDiameter;
}
medium
A. Diameter counts nodes, should count edges (subtract 1)
B. Missing base case for null node
C. Returns depth instead of diameter
D. maxDiameter is not updated inside depth function

Solution

  1. Step 1: Analyze diameter calculation

    maxDiameter updates with left + right + 1, counting nodes on path.
  2. Step 2: Correct diameter definition

    Diameter is number of edges, so subtract 1 from node count to get edges.
  3. Final Answer:

    Diameter counts nodes, should count edges (subtract 1) -> Option A
  4. Quick Check:

    Diameter edges = nodes - 1 [OK]
Hint: Diameter = nodes on path minus 1 for edges [OK]
Common Mistakes:
  • Confusing nodes count with edges count
  • Forgetting to subtract 1 for edges
  • Incorrect base case handling
5. How would you modify the diameter function to also return the actual longest path nodes in TypeScript?
hard
A. Use BFS to find diameter and path separately after diameter calculation
B. Return only diameter number, path cannot be found during recursion
C. Track and store nodes on longest path during recursion, return path array with diameter
D. Store only leaf nodes and reconstruct path after diameter is found

Solution

  1. Step 1: Understand diameter path tracking

    During recursion, keep track of nodes on left and right depths to build longest path.
  2. Step 2: Modify function to store and return path

    Update maxDiameter and store nodes forming longest path, return both diameter and path array.
  3. Final Answer:

    Track and store nodes on longest path during recursion, return path array with diameter -> Option C
  4. Quick Check:

    Store nodes during recursion to get path [OK]
Hint: Store nodes on longest path during recursion to return path [OK]
Common Mistakes:
  • Assuming path cannot be found during recursion
  • Trying BFS after diameter calculation only
  • Only storing leaf nodes misses full path
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