给出一个完全二叉树,求出该树的节点个数。
完全二叉树的定义如下:
在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层节点数可能在1~ 2h 之间。
//这里求树高的函数,偷懒写的,只能求完全二叉树的高;求任意二叉树的高度代码需做比较小的改动
/**
* 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 countNodes(TreeNode* root) {
if(!root) return 0;
int count = 1;
TreeNode* T = root;
while(T->left||T->right){
count = (height(T->left) > height(T->right))?(count*2):(count*2+1);
T = (height(T->left) > height(T->right))?T->left:T->right;
}
return count;
}
int height(TreeNode* root){
int cnt1 = 1;
int cnt2 = 1;
TreeNode* T = root;
if(!root) return 0;
while(T->left){
T = T->left;
cnt1++;
}
T = root;
while(T->right){
T = T->right;
cnt2++;
}
return cnt1 > cnt2?cnt1:cnt2;
}
};