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;
}