📖 Scenario: You are working on a program that analyzes the structure of a family tree stored as a binary tree. You want to find the longest path between any two members in the tree, which is called the diameter of the binary tree.
🎯 Goal: Build a program that calculates the diameter of a binary tree. The diameter is the number of nodes on the longest path between any two nodes in the tree.
📋 What You'll Learn
Create a binary tree with the exact structure given
Add a helper variable to track the maximum diameter
Write a recursive function to calculate the height of each node and update the diameter
Print the diameter of the binary tree
💡 Why This Matters
🌍 Real World
Finding the diameter of a tree structure is useful in network design, family trees, and organizational charts to understand the longest communication or relation path.
💼 Career
Understanding tree traversal and diameter calculation is important for software engineers working with hierarchical data, optimizing network paths, or solving complex algorithmic problems.
Progress0 / 4 steps
1
Create the Binary Tree Structure
Create a class called TreeNode with an int val field, and TreeNode left and TreeNode right fields. Then create the binary tree with this exact structure:
Root node value 1 Left child value 2 Right child value 3 Left child of node 2 is 4 Right child of node 2 is 5
DSA C#
Hint
Define the TreeNode class with a constructor. Then create the root and assign its left and right children as described.
2
Add a Variable to Track Maximum Diameter
Add an int variable called maxDiameter and set it to 0. This will keep track of the largest diameter found during traversal.
DSA C#
Hint
Declare maxDiameter as an integer and initialize it to zero.
3
Write Recursive Function to Calculate Height and Update Diameter
Write a recursive function called Height that takes a TreeNode node and returns an int. It should: 1. Return 0 if node is null. 2. Recursively find the height of the left subtree by calling Height(node.left). 3. Recursively find the height of the right subtree by calling Height(node.right). 4. Update maxDiameter to the maximum of its current value and leftHeight + rightHeight. 5. Return the maximum of leftHeight and rightHeight plus 1.
DSA C#
Hint
Use recursion to find the height of left and right children. Update maxDiameter with the sum of left and right heights. Return the height of the current node.
4
Print the Diameter of the Binary Tree
Write a Console.WriteLine statement to print the value of maxDiameter.
DSA C#
Hint
Call Console.WriteLine(maxDiameter); to display the diameter.
Practice
(1/5)
1. What does the diameter of a binary tree represent?
easy
A. The length of the longest path between any two nodes in the tree
B. The height of the tree from root to the deepest leaf
C. The total number of nodes in the tree
D. The number of leaf nodes in the tree
Solution
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.
Step 2: Differentiate from height and node count
Height is the longest path from root to leaf, node count is total nodes, and leaf count is number of leaves, none of which define diameter.
Final Answer:
The length of the longest path between any two nodes in the tree -> Option A
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 C# method signatures is correct for a function that calculates the diameter of a binary tree node?
easy
A. Diameter public int(TreeNode root)
B. int Diameter(TreeNode root) void
C. public void Diameter(TreeNode root) int
D. public int Diameter(TreeNode root)
Solution
Step 1: Review C# method signature syntax
In C#, method signature starts with access modifier, return type, method name, and parameters in parentheses.
Step 2: Check each option
public int Diameter(TreeNode root) follows correct syntax: public int Diameter(TreeNode root). Others have incorrect order or missing parts.
Final Answer:
public int Diameter(TreeNode root) -> Option D
Quick Check:
Correct C# method syntax = public int Diameter(TreeNode root) [OK]
Hint: Method signature: access modifier + return type + name + parameters [OK]
Common Mistakes:
Placing return type after parameters
Omitting access modifier or return type
Incorrect order of keywords
3. Given the following binary tree code snippet, what is the diameter of the tree?
class TreeNode {
public int val;
public TreeNode left, right;
public TreeNode(int v) { val = v; }
}
// Tree structure:
// 1
// / \
// 2 3
// /
// 4
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
int diameter = CalculateDiameter(root); // Assume CalculateDiameter correctly implemented
Console.WriteLine(diameter);
medium
A. 3
B. 2
C. 4
D. 5
Solution
Step 1: Visualize the tree and longest path
The longest path is from node 4 to node 3: path length = edges 4->2->1->3 = 3 edges.
Step 2: Calculate diameter as number of edges
Diameter counts edges, so longest path length is 3.
Final Answer:
3 -> Option A
Quick Check:
Longest path edges = 3 [OK]
Hint: Count edges on longest path, not nodes [OK]
Common Mistakes:
Counting nodes instead of edges
Assuming diameter passes through root only
Ignoring one side of the tree
4. Identify the bug in this C# code snippet for calculating the diameter of a binary tree:
int maxDiameter = 0;
int Depth(TreeNode node) {
if (node == null) return 0;
int left = Depth(node.left);
int right = Depth(node.right);
maxDiameter = Math.Max(maxDiameter, left + right + 1);
return Math.Max(left, right) + 1;
}
int Diameter(TreeNode root) {
Depth(root);
return maxDiameter;
}
medium
A. The base case should return 1 instead of 0
B. Diameter should be maxDiameter - 1 because diameter counts edges, not nodes
C. maxDiameter should be reset inside Depth method
D. Depth method should return left + right instead of max
Solution
Step 1: Understand diameter counting edges vs nodes
The code adds left + right + 1 (nodes), but diameter counts edges, so subtract 1.
Step 2: Fix return value in Diameter method
Return maxDiameter - 1 to convert node count to edge count for diameter.
Final Answer:
Diameter should be maxDiameter - 1 because diameter counts edges, not nodes -> Option B
Quick Check:
Diameter edges = nodes - 1 [OK]
Hint: Diameter = nodes on path - 1 (edges) [OK]
Common Mistakes:
Returning maxDiameter directly without subtracting 1
Changing base case return value incorrectly
Resetting maxDiameter inside recursive calls
5. You want to find the diameter of a binary tree but also return the path nodes forming that diameter. Which approach correctly extends the diameter calculation?
hard
A. Calculate diameter first, then do a separate BFS to find the path
B. Store all paths from root to leaves and pick the longest one
C. Modify the recursive function to return both depth and path, updating max path when diameter increases
D. Use a queue to traverse level by level and count nodes
Solution
Step 1: Understand diameter and path relationship
Diameter is longest path between any two nodes, so tracking path during recursion helps capture it.
Step 2: Extend recursion to return depth and path
Modify recursive calls to return depth and path list; update max path when a longer diameter is found.
Step 3: Compare other options
Calculate diameter first, then do a separate BFS to find the path is inefficient; C only finds longest root-to-leaf path, not diameter; D is unrelated to diameter.
Final Answer:
Modify the recursive function to return both depth and path, updating max path when diameter increases -> Option C
Quick Check:
Track depth and path together for diameter path [OK]
Hint: Return depth and path in recursion to track diameter path [OK]
Common Mistakes:
Trying to find path after diameter without tracking during recursion
Confusing longest root-to-leaf path with diameter
Using BFS level order traversal which doesn't find diameter
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.