题目:
给定一棵完全二叉树的头节点head,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。
方法(1):递归O(n)算法
int nodeNum(struct TreeNode* head) {
if(NULL == head)
{
return 0;
}
return 1 + nodeNum(head->left) + nodeNum(head->right);
}
方法(2):先计算出二叉树的高度(一直走左路法),如果二叉树的右子树的高度==二叉树高度减1的话,就说明左子树的满二叉树,可以根据公式pow(2,h-1)计算,在模拟递归右子树;否则说明右子树是满二叉树,模拟递归左子树,直到结点为空
/**
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
//计算完全二叉树的高度
int height(struct TreeNode* head)
{
int count=0;
struct TreeNode* cur=head;
while(cu