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
binary search。 如果高度是h,时间复杂度就是O(h^2)。
找到倒数第二行第一个不满的node,然后用公式 2^(h-1)-1+最后一行的leaf数量
public class Solution {
public int countNodes(TreeNode root) {
if(root==null)return 0;
if(root.left==null && root.right==null)return 1;
int height=0;
TreeNode current=root;
while(current!=null)
{
height++;
current=current.left;
}
int start=0, end=(int)Math.pow(2,height-2)-1, depth=1;
current=root;
while(start<end)
{
TreeNode node=current.left;
int h=depth;
while(node!=null)
{
node=node.right;
h++;
}
if(h==height)
{
current=current.right;
start=(start+end)/2+1;
}
else
{
current=current.left;
end=(start+end)/2;
}
depth++;
}
if(current.left==null)return 2*start+(int)Math.pow(2,height-1)-1;
else if(current.right==null) return 2*start+(int)Math.pow(2,height-1);
else return (int)Math.pow(2,height)-1;
}
}