1115 Counting Nodes in a BST (30 分)

水~。

题意

给定一棵二叉查找树(BST)的插入序列,求这棵二叉查找树的最下面两层的结点个数并求和。

注意点

与根结点相同的结点应当插到左子树中。

const int N=1010;
PII tree[N];
int a[N];
int dep[N],maxdep;
int cnt[N];
int n;

void insert(int &root,int idx)
{
    if(root == -1)
    {
        root=idx;
        tree[root]={-1,-1};
        return;
    }

    if(a[idx] <= a[root])
        insert(tree[root].fi,idx);
    else
        insert(tree[root].se,idx);
}

void bfs(int root)
{
    queue<int> q;
    q.push(root);
    dep[root]=1;

    while(q.size())
    {
        int t=q.front();
        q.pop();

        maxdep=max(maxdep,dep[t]);
        cnt[dep[t]]++;

        if(~tree[t].fi)
        {
            dep[tree[t].fi]=dep[t]+1;
            q.push(tree[t].fi);
        }

        if(~tree[t].se)
        {
            dep[tree[t].se]=dep[t]+1;
            q.push(tree[t].se);
        }
    }
}

int main()
{
    cin>>n;

    int root=-1;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        insert(root,i);
    }

    bfs(root);

    cout<<cnt[maxdep]<<" + "<<cnt[maxdep-1]<<" = "<<cnt[maxdep]+cnt[maxdep-1]<<endl;
    //system("pause");
    return 0;
}
posted @ 2021-02-28 16:05  Dazzling!  阅读(52)  评论(0编辑  收藏  举报