/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int countLevel(TreeNode* root){//返回二叉树的高度
int level=0;
while(root){//节点不空时
level++;
root=root->left;//不断由左子树向下伸展
}
return level;
}
int countNodes(TreeNode* root) {
if(!root){//空节点
return 0;
}
int left = countLevel(root->left);
int right = countLevel(root->right);
if(left==right){//左子树一定是满二叉树
return countNodes(root->right)+(1<<left);
}
else{//left=right+1右子树是满二叉树
return countNodes(root->left)+(1<<right);
}
}
};