---
# System prepended metadata

title: '[222. Count Complete Tree Nodes](https://leetcode.com/problems/count-complete-tree-nodes/)'
tags: [Tree, Binary Search, medium, leetcode, Depth_first Search, Binary Tree]

---

###### tags: `leetcode` `medium` `Binary Search` `Tree` `Binary Tree` `Depth_first Search`
# [222. Count Complete Tree Nodes](https://leetcode.com/problems/count-complete-tree-nodes/)

## Description

Given the $root$ of a **complete** binary tree, return the number of the nodes in the tree.  

According to [Wikipedia](https://en.wikipedia.org/wiki/Binary_tree#Types_of_binary_trees), every level, except possibly the last, is completely filled in a complete binary tree, and all nodes in the last level are as far left as possible. It can have between $1$ and $2^h$ nodes inclusive at the last level $h$.  

Design an algorithm that runs in less than $O(n)$ time complexity.  

## Examples
### Example 1:

![complete](https://assets.leetcode.com/uploads/2021/01/14/complete.jpg)
**Input**: root = [1,2,3,4,5,6]
**Output**: 6

### Example 2:

**Input**: root = []
**Output**: 0

### Example 3:

**Input**: root = [1]
**Output**: 1

## Constraints:

- The number of nodes in the tree is in the range $[0, 5 * 10^4]$.
- $0\leq Node.val\leq 5\times 10^4$
- The tree is guaranteed to be **complete**.

## Code

```c=
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int countNodes(struct TreeNode* root){
    if (root == NULL)
        return 0;
    
    if(!root->left && !root->right)
        return 1;
    
    return 1 + countNodes(root->left) + countNodes(root->right);
}
```


## Complexity

|Space |Time  |
|-     |-     |
|$O(1)$|$O(n)$|

## Result

- Runtime: 46 ms, faster than 59.66%
- Memory Usage: 16.8 MB, less than 70.00%

## Notes

