Given the root
of a complete binary tree, return the number of the nodes in the tree.
According to Wikipedia, 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 2h
nodes inclusive at the last level h
.
Design an algorithm that runs in less than O(n)
time complexity.
Example One:
Input: root = [1,2,3,4,5,6]
Output: 6
Example Two:
Input: root = []
Output: 0
Solution:
class Solution {
List<Integer> result = new ArrayList<>();
public int countNodes(TreeNode root) {
helper(root, 0);
return result.size();
}
public void helper(TreeNode node, int level){
if(node == null) return ;
// it is not necessary to have these two clauses
//List<Integer> levelList = new ArrayList<>();
//if(result.size() == level)result.add(levelList);
result.add(node.val);
if(node.left != null) helper(node.left, level + 1);
if(node.right != null) helper(node.right, level + 1);
}
}
Hints:
Logics:
- know how to finish the framework of the code
- use BFS (Breath-First-Search)
- add each value to the list
- count the size of the list