📖 Scenario: You are working on a program that analyzes a family tree structure. Each person is represented as a node in a binary tree. You want to find the longest path between any two people in this tree, which is called the diameter of the tree.
🎯 Goal: Build a C program that creates a binary tree, calculates the diameter of the tree, and prints the diameter value.
📋 What You'll Learn
Create a binary tree node structure with integer values
Manually build a binary tree with 5 nodes
Write a function to calculate the height of a node
Write a function to calculate the diameter of the binary tree
Print the diameter value
💡 Why This Matters
🌍 Real World
Finding the diameter of a tree structure helps in network design, family tree analysis, and understanding longest communication paths.
💼 Career
Understanding tree traversal and recursive algorithms is essential for software engineering roles involving data structures and algorithm optimization.
Progress0 / 4 steps
1
Create the binary tree node structure and build the tree
Create a struct Node with int data, struct Node *left, and struct Node *right. Then create 5 nodes with values 1, 2, 3, 4, and 5. Connect them to form this tree:
1 / \ 2 3 / \ 4 5
Use variables named exactly root, node2, node3, node4, and node5.
DSA C
Hint
Use malloc to create nodes and assign data values. Connect nodes by setting left and right pointers.
2
Add a helper function to calculate the height of a node
Add a function int height(Node *node) that returns 0 if node is NULL. Otherwise, it returns 1 + the maximum height of the left and right children. Use height(node->left) and height(node->right) to get child heights.
DSA C
Hint
Use recursion to get the height of left and right children, then return 1 plus the larger height.
3
Write the function to calculate the diameter of the binary tree
Add a function int diameter(Node *root) that returns the diameter of the tree. If root is NULL, return 0. Otherwise, calculate the height of left and right children using height(root->left) and height(root->right). Calculate diameter passing through root as left_height + right_height. Recursively calculate diameter of left subtree and right subtree. Return the maximum of these three values.
DSA C
Hint
Calculate diameter passing through root and compare with left and right subtree diameters recursively.
4
Print the diameter of the binary tree
Add a printf statement in main to print the diameter of the tree using diameter(root). The output should be exactly: Diameter of the tree is 3
DSA C
Hint
Use printf("Diameter of the tree is %d\n", diameter(root)); to print the diameter.
Practice
(1/5)
1. What does the diameter of a binary tree represent?
easy
A. The total number of nodes in the tree
B. The height of the tree
C. The length of the longest path between any two 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 longest path from root to leaf, leaf count is number of leaves, total nodes is size. Diameter is distinct.
Final Answer:
The length of the longest path between any two nodes in the tree -> Option C
Quick Check:
Diameter = longest path length [OK]
Hint: Diameter is longest path, not height or node count [OK]
Common Mistakes:
Confusing diameter with height
Thinking diameter counts nodes instead of edges
Assuming diameter always passes through root
2. Which of the following C function signatures is correct for a helper function that returns the height of a binary tree node for diameter calculation?
easy
A. int height(struct Node* root);
B. void height(struct Node root);
C. int height(Node root);
D. int height(struct Node root);
Solution
Step 1: Check parameter type for tree node
In C, tree nodes are passed as pointers to struct Node, so parameter should be struct Node* root.
Step 2: Check return type and parameter correctness
Height returns int, so return type int is correct. Passing pointer is correct, not struct by value.
Final Answer:
int height(struct Node* root); -> Option A
Quick Check:
Pointer parameter and int return type [OK]
Hint: Use pointer to struct Node for tree nodes in C [OK]
Common Mistakes:
Passing struct Node by value instead of pointer
Using void return type instead of int
Missing struct keyword in parameter
3. What is the output of the following C code snippet that calculates the diameter of a binary tree?
struct Node {
int data;
struct Node* left;
struct Node* right;
};
int height(struct Node* root) {
if (!root) return 0;
int leftHeight = height(root->left);
int rightHeight = height(root->right);
return 1 + (leftHeight > rightHeight ? leftHeight : rightHeight);
}
int diameter(struct Node* root) {
if (!root) return 0;
int leftHeight = height(root->left);
int rightHeight = height(root->right);
int leftDiameter = diameter(root->left);
int rightDiameter = diameter(root->right);
int maxDiameter = leftHeight + rightHeight + 1;
if (leftDiameter > maxDiameter) maxDiameter = leftDiameter;
if (rightDiameter > maxDiameter) maxDiameter = rightDiameter;
return maxDiameter;
}
int main() {
struct Node n1 = {1, NULL, NULL};
struct Node n2 = {2, NULL, NULL};
struct Node n3 = {3, &n1, &n2};
printf("%d", diameter(&n3));
return 0;
}
medium
A. 1
B. 2
C. 4
D. 3
Solution
Step 1: Analyze tree structure
Root n3 has two children n1 and n2, both leaves. Height of left and right subtree is 1 each.
Step 2: Calculate diameter
Diameter = max of (leftHeight + rightHeight + 1, leftDiameter, rightDiameter) = max(1+1+1, 1, 1) = 3.
4. Identify the bug in this C function that attempts to compute the diameter of a binary tree:
int diameter(struct Node* root) {
if (!root) return 0;
int leftHeight = height(root->left);
int rightHeight = height(root->right);
int leftDiameter = diameter(root->left);
int rightDiameter = diameter(root->right);
int maxDiameter = leftHeight + rightHeight;
if (leftDiameter > maxDiameter) maxDiameter = leftDiameter;
if (rightDiameter > maxDiameter) maxDiameter = rightDiameter;
return maxDiameter;
}
medium
A. height function is not called correctly
B. maxDiameter should be leftHeight + rightHeight + 1
C. Function should return height, not diameter
D. Missing base case for leaf nodes
Solution
Step 1: Check diameter calculation formula
Diameter includes edges between nodes, so it should add 1 for the root node connecting left and right paths.
Step 2: Identify missing +1 in maxDiameter
Current code misses +1, so maxDiameter undercounts by 1.
Final Answer:
maxDiameter should be leftHeight + rightHeight + 1 -> Option B
Quick Check:
Diameter = leftHeight + rightHeight + 1 [OK]
Hint: Add 1 to sum of heights for diameter at root [OK]
Common Mistakes:
Omitting +1 in diameter calculation
Confusing height and diameter returns
Not handling null root base case
5. Given a binary tree where each node stores an integer, how would you modify the diameter calculation to find the diameter based on the sum of node values along the longest path instead of the number of nodes?
hard
A. Change height function to return max sum of node values from root to leaf, and update diameter to sum left and right max sums plus root's value
B. Use the existing diameter function but multiply the result by the root node's value
C. Replace all node values with 1 and then calculate diameter normally
D. Calculate diameter normally and then add all node values in the tree separately
Solution
Step 1: Modify height to return max sum path
Instead of counting nodes, height returns max sum of node values from root to leaf recursively.
Step 2: Update diameter to sum left and right max sums plus root value
Diameter becomes max of leftDiameter, rightDiameter, and leftSum + rightSum + root's value.
Final Answer:
Change height function to return max sum of node values from root to leaf, and update diameter to sum left and right max sums plus root's value -> Option A
Quick Check:
Diameter by sum = max path sum through root [OK]
Hint: Use max sum path instead of node count for diameter sum [OK]
Common Mistakes:
Multiplying diameter by root value incorrectly
Ignoring node values in diameter calculation
Adding all node values separately instead of path sums
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.