问题描述:
给定一棵完全二叉树的头节点head,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。
最优AC代码:
class Solution {
public:
int nodenum(struct TreeNode* head,int l,int h){
if(head==NULL)
return 0;
int high=0;
TreeNode *temp=head;
temp=temp->right;
while(temp){
high++;
temp=temp->left;
}
if(h-l==high)
return (1<<(h-l))+nodenum(head->right,l+1,h);
else return (1<<(h-l-1))+nodenum(head->left,l+1,h);
}
int nodeNum(struct TreeNode* head) {
TreeNode *temp=head;
int high=0;
while(temp){
high++;
temp=temp->left;
}
return nodenum(head,1,high);
}
};