Given a complete binary tree, count the number of nodes.
Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, 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.
int countHelper(TreeNode* root) { // do it recursively!
if(!root) return 0;
TreeNode* l = root;
TreeNode* r = root;
int leftCount = 0, rightCount = 0;
while(l) {
leftCount++;
l = l->left;
}
while(r) {
rightCount++;
r = r->right;
}
if(leftCount == rightCount) return pow(2, rightCount) - 1;
else return countHelper(root->left) + countHelper(root->right) + 1;
}
int countNodes(TreeNode* root) {
return countHelper(root);
}