11/24
补
算法详解
根据满二叉树的特性
以根节点左子树为根的树的层数与以根节点右子树为根的树的层数之差为0或为1
我们将前者记为a,后者记为b
如果a=b,那么前者必然为满二叉树
如果a=b+1,那么后者必然为满二叉树
并且满二叉树的节点数为2^n
显然,我们能通过递归来实现这个算法
时间复杂度为o(logn)
class Solution {
public int countNodes(TreeNode root) {
if(root==null) {
return 0;
}
int l=steps(root.left);
int r=steps(root.right);
if(l==r){
return countNodes(root.right)+(1<<l);
}
else{
return countNodes(root.left)+(1<<r);
}
}
public int steps(TreeNode rt){
int ans=0;
while(rt!=null){
rt=rt.left;
ans++;
}
return ans;
}
}