统计完全二叉树的节点数

#include "Tree.h"
using namespace std;
//时间复杂度为O(h^2),h是二叉树的高度
int mostLeftlevel(Node* head, int level)
{
    while(head != nullptr)
    {
        ++level;
        head = head->left;
    }
    return level - 1;
}
int bs(Node* node, int L, int h)
{
    if(l == h)
        return 1;
    if(mostLeftlevel(node->right, L + 1) == h)
        return (1 << (h - L)) + bs(node->right, L + 1, h);
    else
        return (1 << (h - L - 1)) + bs(node->left, L + 1, h);
}
int nodeNum(Node* head)
{
    if(head == nullptr)
        return 0;
    return bs(head, 1, mostLeftlevel(head, 1));
}

猜你喜欢

转载自blog.csdn.net/wzc2608/article/details/80880020