参考
https://blog.csdn.net/jmspan/article/details/51056085
参考:
https://leetcode.com/problems/count-complete-tree-nodes/discuss/62041/Simple-C%2B%2B-recursive-solution
int getLeftHeight(TreeNode* root) { //计算root为根的高度
int height = 0;
while(root) {
root = root->left; //注意是左,这样统计的最大高度
height++;
}
return height;
}
int countNodes(TreeNode* root) {
if(!root) return 0;
int left_height = getLeftHeight(root->left);
int right_height = getLeftHeight(root->right);
if(left_height == right_height) //左右高度相同,说明左子树一定是满二叉树(即所有节点都是满的)
return pow(2, left_height) + countNodes(root->right);
return pow(2, right_height) + countNodes(root->left);//左右高度不同,此时应该是左边高度比右边大1,右边是满二叉树,不过是少了一层了满二叉树
}