Count Total Nodes in Binary Tree in DSA Python - Time & Space Complexity
We want to know how long it takes to count all nodes in a binary tree as the tree grows.
How does the time needed change when the tree has more nodes?
Analyze the time complexity of the following code snippet.
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def count_nodes(root):
if root is None:
return 0
return 1 + count_nodes(root.left) + count_nodes(root.right)
This code counts all nodes in a binary tree by visiting each node once.
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 exactly once, so the work grows directly with the number of nodes.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 visits |
| 100 | About 100 visits |
| 1000 | About 1000 visits |
Pattern observation: The time grows linearly as the tree size increases.
Time Complexity: O(n)
This means the time to count nodes grows directly with the number of nodes in the tree.
[X] Wrong: "The function only visits some nodes, so it runs faster than O(n)."
[OK] Correct: The function visits every node exactly once, so it must look at all nodes to count them.
Understanding how recursive tree traversal scales helps you explain and write efficient tree algorithms confidently.
"What if we changed the tree to a linked list (all nodes have only one child)? How would the time complexity change?"
Practice
Solution
Step 1: Understand the base case for an empty tree
When the binary tree is empty, there are no nodes to count, so the count should be zero.Step 2: Confirm the return value for empty tree
The function should return 0 to indicate no nodes exist.Final Answer:
0 -> Option BQuick Check:
Empty tree nodes = 0 [OK]
- Returning 1 for empty tree
- Returning None instead of 0
- Returning -1 as error code
count_nodes that takes a parameter root?Solution
Step 1: Recall Python function definition syntax
In Python, functions are defined using thedefkeyword followed by the function name and parameters in parentheses.Step 2: Match the correct syntax
def count_nodes(root): correctly usesdef count_nodes(root):which is valid Python syntax.Final Answer:
def count_nodes(root): -> Option DQuick Check:
Python functions start with def and parentheses [OK]
- Using 'function' keyword
- Incorrect arrow syntax
- Misplacing def after parameters
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def count_nodes(root):
if root is None:
return 0
return 1 + count_nodes(root.left) + count_nodes(root.right)
root = Node(10)
root.left = Node(5)
root.right = Node(15)
root.left.left = Node(3)
print(count_nodes(root))Solution
Step 1: Count nodes in the tree structure
The tree has nodes: 10 (root), 5 (left), 15 (right), and 3 (left of 5). Total nodes = 4.Step 2: Confirm recursive count
The function counts 1 for root + counts left subtree (2 nodes) + counts right subtree (1 node) = 4.Final Answer:
4 -> Option AQuick Check:
Total nodes counted = 4 [OK]
- Counting only root and children
- Ignoring left.left node
- Returning error due to None check missing
def count_nodes(root):
if root == None:
return 1
return 1 + count_nodes(root.left) + count_nodes(root.right)Solution
Step 1: Analyze base case return value
The base case should return 0 when the node is None because no node exists there.Step 2: Identify incorrect return value
Returning 1 for None causes overcounting nodes, leading to wrong total count.Final Answer:
Base case returns 1 instead of 0 for None -> Option AQuick Check:
Base case must return 0 for empty node [OK]
- Returning 1 for None
- Confusing '==' and 'is' but both work
- Missing colon is syntax error
Solution
Step 1: Use property of full binary tree
In a full binary tree, total nodes = 2 * leaf nodes - 1.Step 2: Calculate total nodes
Total nodes = 2 * 7 - 1 = 14 - 1 = 13.Step 3: Recheck formula correctness
Actually, total nodes = 2 * leaf nodes - 1 = 13, but the options include 15 which is the total nodes for a perfect binary tree of height 3 (which has 7 leaves and 15 nodes). Since the tree has nodes with either 0 or 2 children (full binary tree), the formula applies and the correct total nodes is 13.Final Answer:
13 -> Option CQuick Check:
Total nodes = 2 * leaves - 1 = 13 [OK]
- Using total nodes = leaves * 2
- Confusing full and complete tree formulas
- Ignoring leaf node count
Ready to prove it?
Pass the test and this pattern moves unknown
