2021-PTA模拟赛-L2-3 二叉搜索树的2层结点统计(建树)

思路:

建树的时候顺便记录每一层结点数量,顺便统计树的高度。

AcCode:

#include<bits/stdc++.h>
using namespace std;
struct node{
    int v;
    node *l, *r;
};

int cnt[1100], dp = 0;

void insert(node* rt, int v, int deep){
    if(v > rt->v){
        if(rt->r != NULL) insert(rt->r, v, deep + 1);
        else{
            //cout << "插在右边" << rt->v << endl;
            rt->r = new node;
            rt->r->v = v;
            rt->r->l = NULL;
            rt->r->r = NULL;
            cnt[deep + 1]++;
            dp = max(deep + 1, dp);
        }
    }
    else{
        if(rt->l != NULL) insert(rt->l, v, deep + 1);
        else{
            //cout << "插在左边" << rt->v << endl;
            rt->l = new node;
            rt->l->v = v;
            rt->l->l = NULL;
            rt->l->r = NULL;
            cnt[deep + 1]++;
            dp = max(deep + 1, dp);
        }
    }
    return ;
}

int main(){
    int N;
    cin >> N;
    int root;
    cin >> root;
    if(N == 1){
        cout << 1;
        return 0;
    }
    node *tree = new node;
    tree->v = root;
    tree->l = NULL;
    tree->r = NULL;
    for(int i = 1; i < N; i++){
        int x;
        cin >> x;
        insert(tree, x, 1);
    }
    cout << cnt[dp - 1] + cnt[dp];
    return 0;
}
posted @ 2025-04-18 21:01  Yuhhhhh  阅读(14)  评论(0)    收藏  举报