给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例:
输入:
1
/ \
2 3
/ \ /
4 5 6
输出: 6
思路:其实是一个史诗级简单的回朔题,但是我们当然不要去用回朔去解这道题啦,虽然能过,但是太low了,我们要合理的利用好完全二叉树的性质(见题目描述,这里不再赘述~),我们可以思考一种迭代的方法去解决这道题,并且不用像回朔一样去遍历完所有节点。
class Solution {
int ans=0;
public int countNodes(TreeNode root) {
if(root==null)
return 0;
int left=FindLevel(root.left);
int right=FindLevel(root.right);
if(left==right)
return (1<<left)+countNodes(root.right);
else
return (1<<right)+countNodes(root.left);
}
private int FindLevel(TreeNode root)
{
int level=0;
while(root!=null)
{
level++;
root=root.left;
}
return level;
}
}