###### 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:

**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