问题描述:
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.
分析:这道题如果使用暴力搜索的话,时间复杂度为O(N),结果会TLE,然后改用一种递归的方式,每次对一个节点,求它的左节点的深度是否与右节点深度相同,如果相同,那以此为根节点的子树的个数为2^height-1,如果不同,那么就查左子树和右子树之和再加根节点。
代码如下:296ms
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int getHeight(struct TreeNode* root,bool isRight){
int count = 0;
while(root)
{
count++;
if(isRight)
root=root->right;
else
root=root->left;
}
return count;
}
int countNodes(struct TreeNode* root) {
if(!root)
return 0;
int leftHeight = getHeight(root,false);//左子树的深度
int rightHeight = getHeight(root,true);//右子树的深度
if(leftHeight==rightHeight){
return pow(2,leftHeight)-1;
}else{
return countNodes(root->left)+countNodes(root->right)+1;
}
}