What if you could count every member in a huge family tree without missing a single one, in just a few lines of code?
Why Count Total Nodes in Binary Tree in DSA Typescript?
Imagine you have a family tree drawn on paper, and you want to count how many family members are there. You try to count each person one by one manually, but the tree is big and branches out in many directions.
Counting each member manually is slow and easy to lose track. You might count some members twice or miss others, especially when the tree has many branches and levels.
Using a method to count nodes in a binary tree automatically visits each member once, adding them up correctly without missing or repeating. This method works quickly even for large trees.
let count = 0; // Manually visit each node and increment count count = 1 + 1 + 1 + ... // very long and error-prone
function countNodes(node: TreeNode | null): number {
if (!node) return 0;
return 1 + countNodes(node.left) + countNodes(node.right);
}This lets you quickly find out how many nodes are in any binary tree, no matter how big or complex.
Counting total files in a folder structure where each folder can have subfolders and files, similar to counting nodes in a tree.
Manual counting is slow and error-prone for trees.
Recursive counting visits each node once and sums correctly.
This method works efficiently for any binary tree size.
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 function's return value for empty input
The function should return 0 to indicate no nodes exist in the tree.Final Answer:
0 -> Option CQuick Check:
Empty tree node count = 0 [OK]
- Returning 1 for empty tree
- Returning null instead of 0
- Confusing empty tree with leaf node
Solution
Step 1: Identify correct parameter type for binary tree root
The root should be a TreeNode or null if the tree is empty.Step 2: Confirm return type for count function
The function returns a number representing total nodes, so return type must be number.Final Answer:
function countNodes(root: TreeNode | null): number -> Option DQuick Check:
Correct parameter and return types = function countNodes(root: TreeNode | null): number [OK]
- Using wrong parameter type
- Returning void instead of number
- Returning string instead of number
console.log(countNodes(root));?
class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val: number) {
this.val = val;
this.left = null;
this.right = null;
}
}
function countNodes(root: TreeNode | null): number {
if (!root) return 0;
return 1 + countNodes(root.left) + countNodes(root.right);
}
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
Solution
Step 1: Count nodes in the tree structure
The tree has nodes: 1 (root), 2 and 3 (children), 4 and 5 (children of 2). Total nodes = 5.Step 2: Verify recursive count function output
The function counts 1 for root plus counts of left and right subtrees, summing to 5.Final Answer:
5 -> Option AQuick Check:
Total nodes counted = 5 [OK]
- Counting only leaf nodes
- Missing one subtree
- Off-by-one error in count
function countNodes(root: TreeNode | null): number {
if (root === null) return 1;
return 1 + countNodes(root.left) + countNodes(root.right);
}Solution
Step 1: Check base case return value
The base case returns 1 when root is null, which incorrectly counts non-existent nodes.Step 2: Understand correct base case for counting nodes
For null nodes, the count should be 0, not 1, to avoid overcounting.Final Answer:
Base case returns 1 instead of 0 for null -> Option BQuick Check:
Base case must return 0 for null [OK]
- Returning 1 for null node
- Not counting current node
- Wrong parameter or return types
function countEvenNodes(root: TreeNode | null): number {
if (!root) return 0;
const leftCount = countEvenNodes(root.left);
const rightCount = countEvenNodes(root.right);
// What to add here?
}Solution
Step 1: Check node value for evenness
Use modulo operator to check if root.val is even; if yes, count 1, else 0.Step 2: Sum counts from left, right, and current node if even
Add leftCount, rightCount, and 1 or 0 based on current node's evenness.Final Answer:
return (root.val % 2 === 0 ? 1 : 0) + leftCount + rightCount; -> Option AQuick Check:
Count only even nodes correctly [OK]
- Counting all nodes regardless of value
- Counting odd nodes instead
- Forgetting to add left and right counts
Ready to prove it?
Pass the test and this pattern moves unknown
