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