https://leetcode.com/problems/count-complete-tree-nodes/#/description
http://www.cnblogs.com/EdwardLiu/p/5058570.html
/**
* 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 leftHeight = countLeft(root);
int rightHeight = countRight(root);
if (leftHeight == rightHeight) { //perfect binary tree
return (1<<leftHeight)-1;
}
else return countNodes(root.left) + countNodes(root.right) + 1;
}
public int countLeft(TreeNode root) {
int res = 0;
while (root != null) {
res++;
root = root.left;
}
return res;
}
public int countRight(TreeNode root) {
int res = 0;
while (root != null) {
res++;
root = root.right;
}
return res;
}
}
原文:http://www.cnblogs.com/apanda009/p/7098033.html