Height of Binary Tree in DSA C# - Time & Space Complexity
We want to understand how the time needed to find the height of a binary tree changes as the tree grows.
How does the work increase when the tree has more nodes?
Analyze the time complexity of the following code snippet.
public class Node {
public int Value;
public Node Left, Right;
}
int Height(Node root) {
if (root == null) return 0;
int leftHeight = Height(root.Left);
int rightHeight = Height(root.Right);
return 1 + Math.Max(leftHeight, rightHeight);
}
This code finds the height of a binary tree by checking the height of left and right subtrees recursively.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Recursive calls visiting each node once.
- How many times: Once per node in the tree.
Each node is visited once, so the work grows directly with the number of nodes.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 calls |
| 100 | About 100 calls |
| 1000 | About 1000 calls |
Pattern observation: The work grows linearly as the tree size increases.
Time Complexity: O(n)
This means the time to find the height grows directly with the number of nodes in the tree.
[X] Wrong: "The height calculation only depends on the longest path, so it takes O(log n) time."
[OK] Correct: Even though height is about the longest path, the function must visit every node to be sure, so it takes time proportional to all nodes, not just the longest path.
Understanding this helps you explain how recursive tree algorithms work and why visiting all nodes is often necessary.
"What if the tree was a linked list (all nodes have only one child)? How would the time complexity change?"
Practice
Solution
Step 1: Understand the definition of height in a binary tree
The height is defined as the longest path from the root node down to the farthest leaf node, counted by edges.Step 2: Compare with other options
Other options describe different properties: total nodes, leaf count, or root children, which are not height.Final Answer:
The number of edges on the longest path from root to a leaf -> Option AQuick Check:
Height = longest root-to-leaf edge count [OK]
- Confusing height with total nodes
- Counting nodes instead of edges
- Thinking height is number of leaves
root?Solution
Step 1: Identify correct return type and parameters
The height function must return an integer representing height, so return type is int. It needs the root node as input, so parameter is Node root.Step 2: Check options for matching signature
public int Height(Node root) matches: returns int and takes Node root. public void Height(Node root) returns void (wrong), C has no parameters (wrong), D has extra parameter not needed for basic height.Final Answer:
public int Height(Node root) -> Option DQuick Check:
Return int and take root node parameter [OK]
- Using void return type
- Missing root parameter
- Adding unnecessary parameters
class Node {
public int data;
public Node left, right;
public Node(int d) { data = d; left = right = null; }
}
int Height(Node root) {
if (root == null) return -1;
int leftHeight = Height(root.left);
int rightHeight = Height(root.right);
return Math.Max(leftHeight, rightHeight) + 1;
}
// Tree:
// 1
// / \
// 2 3
// /
// 4
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
Console.WriteLine(Height(root));Solution
Step 1: Understand the height calculation logic
Height returns -1 for null nodes. For leaf nodes, height = 0. Height is max of left and right subtree heights plus 1.Step 2: Calculate height for given tree
Node 4: left and right null, height = 0.
Node 2: left height 0 (node 4), right null (-1), max=0 +1=1.
Node 3: leaf, height=0.
Root 1: left height 1, right height 0, max=1 +1=2.Final Answer:
2 -> Option CQuick Check:
Height of root = 2 edges [OK]
- Counting nodes instead of edges
- Returning 0 for null instead of -1
- Miscomputing max height
int Height(Node root) {
if (root == null) return 0;
int leftHeight = Height(root.left);
int rightHeight = Height(root.right);
return Math.Max(leftHeight, rightHeight);
}Solution
Step 1: Analyze base case and return statement
Base case returns 0 for null, which means height of empty tree is 0. The recursive calls get left and right heights correctly.Step 2: Check final return calculation
Height should be max of left and right heights plus 1 for current node. The code misses +1, so height is underestimated.Final Answer:
Add +1 to the return statement after Math.Max -> Option BQuick Check:
Height = max(left, right) + 1 [OK]
- Forgetting +1 in return
- Changing base case incorrectly
- Using min instead of max
Solution
Step 1: Understand problem requirements
We need the height of the tree and sum of nodes at that height level (deepest level).Step 2: Choose correct approach
First find height, then traverse tree again to sum nodes at that height: Find height first, then traverse again to sum nodes at that level. This separates concerns and is clear.
Sum all nodes during height calculation recursively tries to sum during height calculation, but height is computed bottom-up and summing nodes at max height requires separate traversal.
Return height multiplied by root node value and D do not meet problem requirements.Final Answer:
First find height, then traverse tree again to sum nodes at that height -> Option AQuick Check:
Two-pass approach: height then sum at height [OK]
- Trying to sum nodes during height recursion
- Multiplying height by root value
- Summing all leaf nodes ignoring height
Ready to prove it?
Pass the test and this pattern moves unknown
