题目链接:传送门
思路:使用结构体构建二叉树结构,然后模拟平衡二叉树过程即可,最后记录第一大和第二大的节点的数量即可,代码写丑了,可以直接用数组表示二叉树每层的节点数的。。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
struct node{
int data;
int left , right;
node() {
left = right = -1;
}
}tree[maxn];
int n , p;
int a[maxn];
int b[maxn];
int m_insert(int pos , int d , int level) {
if(pos != -1) {
if(d <= tree[pos].data) {
tree[pos].left = m_insert(tree[pos].left , d , level + 1);
}
else {
tree[pos].right = m_insert(tree[pos].right , d , level + 1);
}
return pos;
}
else {
tree[++p].data = d;
b[p] = level;
return p;
}
}
int main() {
ios::sync_with_stdio(0);
cin >> n;
int t;
cin >> t;
tree[0].data = t;
for(int i = 1 ; i < n ; i++) {
cin >> t;
m_insert(0 , t , 1);
}
sort(b , b + n);
int ans = 0 , ans1 = 0 , i;
t = b[n - 1];
for(i = n - 1 ; i >= 0 && t == b[i] ; i--) {
ans++;
}
if(i >= 0)t = b[i];
for(; i >= 0 && t == b[i] ; i--)ans1++;
cout << ans << " + " << ans1 << " = " << ans + ans1 << "\n";
return 0;
}