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(2^h-1)h为树的高度。我们可以利用这个特质,进行递归求解。
源代码如下:
/**
* 完全二叉树的特点就是如果左子树的高度等于右子树的高度则节点数为O(2^h-1)h为树的高度
* */
public int countNodes(TreeNode root) {
if(root==null) return 0;
int left=getLeft(root.left);
int right=getRight(root.right);
int sum=0;
if(left==right&&left!=0)
{
sum=(2<<left)-1;
}
else
{
sum=countNodes(root.left)+countNodes(root.right)+1;
}
return sum;
}
public int getLeft(TreeNode root)
{
int left=0;
while(root!=null)
{
left++;
root=root.left;
}
return left;
}
public int getRight(TreeNode root)
{
int right=0;
while(root!=null)
{
right++;
root=root.right;
}
return right;
}