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.
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.
Subscribe to see which companies asked this question.
完全二叉树。思路是先找到树的高度h,如果右子树的高度为h-1的话证明最后一个节点在右子树,左子树为满树,因此res+=左子树的节点个数+根节点=2^(h-1),根节点移到右边。
如果右子树的高度不为h-1的话证明最后一个节点在左子树,右子树为满树,res+=右子树的节点个数+根节点=2^(h-2).根节点移到左边。
class Solution {
public:
int height(TreeNode* root){
return root==NULL ? -1 : height(root->left)+1;
}
int countNodes(TreeNode* root) {
int sum=0, h=height(root);
while(root){
if(height(root->right) == h - 1){
sum += pow(2,h);
root = root->right;
}
else{
sum += pow(2,h-1);
root = root->left;
}
h--;
}
return sum;
}
};
需要注意的是这里为了计算方便,直接返回的h值就是实际的h值-1.比如叶子节点的高度是0.