对于每个节点如果左子树的高度等于右子树的高度,则直接套公式2^h-1,否则等于左子树的结点数量+右子树的结点数量+1
public class Solution {
public int countNodes(TreeNode root) {if(root == null) return 0;
int l =getLeft(root)+1;
int r =getRight(root)+1;
if(l == r)
return (2<<(l-1))-1;
return countNodes(root.left)+countNodes(root.right) + 1;
}
private int getLeft(TreeNode root)
{
int height =0;
while(root!=null)
{
if(root.left != null)
height++;
root = root.left;
}
return height;
}
private int getRight(TreeNode root)
{
int height =0;
while(root !=null)
{
if(root.right != null)
height++;
root = root.right;
}
return height;
}
}