📖 Scenario: You are working with a simple binary tree structure in C. Each node contains an integer value and pointers to its left and right child nodes. Your task is to count how many nodes are in the entire tree.
🎯 Goal: Build a C program that creates a binary tree with specific nodes, then counts and prints the total number of nodes in the tree.
📋 What You'll Learn
Define a struct called Node with an integer data and two pointers left and right.
Create a binary tree with exactly 3 nodes with values 10, 20, and 30 arranged as root, left child, and right child respectively.
Write a function called countNodes that takes a pointer to the root node and returns the total number of nodes in the tree.
Print the total number of nodes in the tree.
💡 Why This Matters
🌍 Real World
Counting nodes in a binary tree is a basic operation useful in many applications like file systems, expression parsing, and organizing data hierarchically.
💼 Career
Understanding binary trees and recursion is essential for software developers working with data structures, algorithms, and system design.
Progress0 / 4 steps
1
Define the Node struct and create the root node
Define a struct called Node with an integer data and two pointers left and right to Node. Then create a root node pointer called root and allocate memory for it. Set root->data to 10 and both root->left and root->right to NULL.
DSA C
Hint
Use typedef struct Node to define the node. Use malloc to allocate memory for the root node.
2
Add left and right child nodes
Create two new nodes called leftChild and rightChild by allocating memory. Set leftChild->data to 20 and rightChild->data to 30. Set their left and right pointers to NULL. Then link these nodes to root->left and root->right respectively.
DSA C
Hint
Use malloc to create the child nodes and assign their data and pointers. Then link them to the root.
3
Write the countNodes function
Write a function called countNodes that takes a pointer to a Node called root. It should return 0 if root is NULL. Otherwise, it should return 1 + countNodes(root->left) + countNodes(root->right) to count all nodes in the tree.
DSA C
Hint
Use recursion to count nodes. Base case is when root is NULL.
4
Print the total number of nodes
Call the countNodes function with root and print the returned value using printf with the format "Total nodes: %d\n".
DSA C
Hint
Call countNodes(root) and print the result with printf.
Practice
(1/5)
1. What does the function to count total nodes in a binary tree do?
easy
A. Counts all nodes including root, left, and right children
B. Counts only leaf nodes
C. Counts only nodes with two children
D. Counts nodes only at the last level
Solution
Step 1: Understand the function purpose
The function visits every node in the tree to count them all.
Step 2: Recognize node types counted
It includes root, internal nodes, and leaf nodes in the count.
Final Answer:
Counts all nodes including root, left, and right children -> Option A
Quick Check:
Total nodes = all nodes in tree [OK]
Hint: Count every node visited in the tree [OK]
Common Mistakes:
Counting only leaf nodes
Ignoring root node in count
Counting only nodes with two children
2. Which of the following is the correct base case for counting nodes in a binary tree recursively in C?
easy
A. if (root->left == NULL) return 0;
B. if (root == NULL) return 1;
C. if (root == NULL) return 0;
D. if (root->right == NULL) return 1;
Solution
Step 1: Identify base case for recursion
When the node is NULL, it means no node exists, so count is zero.
Step 2: Confirm correct return value
Return 0 to indicate no nodes to count at this branch.
Final Answer:
if (root == NULL) return 0; -> Option C
Quick Check:
NULL node means zero nodes [OK]
Hint: Return 0 when node is NULL [OK]
Common Mistakes:
Returning 1 for NULL node
Checking only left or right child for base case
Missing base case causing infinite recursion
3. What is the output of the following code snippet counting nodes in a binary tree?
Hint: Add 1 for root plus counts of left and right [OK]
Common Mistakes:
Counting only leaf nodes
Forgetting to add root node
Miscounting subtree nodes
4. Find the error in this node counting function and select the correct fix:
int countNodes(Node* root) {
if (root == NULL) return 1;
return countNodes(root->left) + countNodes(root->right);
}
medium
A. Both A and B are needed
B. Add +1 to the return statement to count current node
C. Change base case return to 0 instead of 1
D. No error, function is correct
Solution
Step 1: Check base case return value
Returning 1 for NULL node is wrong; should return 0.
Step 2: Check counting current node
Function misses counting current node; add +1 to sum of children.
Final Answer:
Both A and B are needed -> Option A
Quick Check:
Base case 0 + count current node 1 [OK]
Hint: Base case 0 + add 1 for current node [OK]
Common Mistakes:
Returning 1 for NULL node
Not adding 1 for current node
Assuming function is correct without base case
5. Given a binary tree where some nodes have only one child, how would you modify the counting function to count only nodes that have at least one child?
hard
A. Count nodes with two children only
B. Count all nodes including leaf nodes
C. Count only leaf nodes with no children
D. Count nodes where left or right child is not NULL, skip leaf nodes
Solution
Step 1: Identify nodes with children
Check if node's left or right child is not NULL to confirm it has children.
Step 2: Count only nodes with children
Return 1 for nodes with children plus recursive counts; skip leaf nodes.
Final Answer:
Count nodes where left or right child is not NULL, skip leaf nodes -> Option D
Quick Check:
Count nodes with children only [OK]
Hint: Count nodes having at least one child only [OK]
Common Mistakes:
Counting leaf nodes mistakenly
Counting only nodes with two children
Ignoring nodes with one child
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.