Question
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 2<sup>h</sup>
nodes inclusive at the last level h
.
Design an algorithm that runs in less than O(n)
time complexity.
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<sup>4</sup>]
.0 <= Node.val <= 5 * 10<sup>4</sup>
The tree is guaranteed to be complete.
Solution
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def __init__(self):
self.count = 0
def countNodes(self, root: Optional[TreeNode]) -> int:
self.count_nodes(root)
return self.count
def count_nodes(self,root):
if root:
self.count+=1
if root.left:
self.count_nodes(root.left)
if root.right:
self.count_nodes(root.right)
return
Time Complexity: O(n)