题目描述
给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例:
输入:
1
/
2 3
/ \ /
4 5 6
输出: 6
解法一:暴力
public int countNodes(TreeNode root) {
if (root == null){
return 0;
}
return countNodes(root.left) + countNodes(root.right) + 1;
}
解法二:完全二叉树特性
- 若left==right,则不平衡点在右子树。将左边的所有结点跟根结点进行计算,结果为2*left-1+1
- 若left!=right,则不平衡点在左子树,则将右边的所有结点跟根节点相加,结果为2*right-1+1
class Solution {
public int countNodes(TreeNode root) {
if(root==null) return 0;
int left = countlevel(root.left);
int right = countlevel(root.right);
if(left==right) {
return countNodes(root.right)+(1<<left);
}
else{
return countNodes(root.left)+(1<<right);
}
}
public int countlevel(TreeNode root){
int level=0;
while(root!=null){
level++;
root=root.left;
}
return level;
}
}