/**
* 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) {
if(root==null)
return 0;
//获取到左右两个深度
int leftDepth=getLeftDepth(root)+1;
int rightDepth=getRightDepth(root)+1;
if(leftDepth==rightDepth)
{
//这里采用位运算可以让实际那复杂度更加低,如果调用pow计算的话,会超时
return (2<<(leftDepth-1)) - 1;
//return (int)Math.pow(2,leftDepth)-1;
}
else
{
return countNodes(root.left)+countNodes(root.right)+1;
}
}
public int getLeftDepth(TreeNode root)
{
int res=0;
TreeNode temp=root.left;
while(temp!=null)
{
res++;
temp=temp.left;
}
return res;
}
public int getRightDepth(TreeNode root)
{
int res=0;
TreeNode temp=root.right;
while(temp!=null)
{
res++;
temp=temp.right;
}
return res;
}
}