/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int countNodes(TreeNode root) {
return count(root,-1,-1);
}
public int count(TreeNode root,int leftNum,int rightNum){
if(root==null){
return 0;
}
int leftFloor=leftNum,rightFloor=rightNum;
if(leftFloor==-1){
leftFloor=1;
TreeNode h=root;
while(h.left!=null){
leftFloor++;
h=h.left;
}
}
if(rightFloor==-1){
rightFloor=1;
TreeNode h=root;
while(h.right!=null){
rightFloor++;
h=h.right;
}
}
if(leftFloor==rightFloor){
return (int)Math.pow(2, rightFloor)-1;
}else{
return count(root.left,leftFloor-1,-1)+count(root.right,-1,rightFloor-1)+1;
}
}
}
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.
大意为给出一个完全二叉树,求出所有节点的个数
我的思路为二分法,先判断根节点最左到叶子节点和最右到叶子节点的距离,如果相等则说明是满二叉树,使用公式可以直接算出,如果不相等则递归进行根节点的左节点和右节点再加一,把根节点已经算出的深度-1传到下一个节点,节省时间
但这个算法并没有AC,只通过了16/18的样例