解析:这道30分的题10分钟以内可以完成,送命题。
最多1000
的点故用int level[1010]
记录从0~1000层节点数,初始为0
。用Max
记录当前最大层数。只需要一个插入函数, 在构建搜索树的同时把最大层数记录,并维护level数组
即可。树建好了答案也就有了。
#include<cstdio>
struct node
{
node* lchild, *rchild;
int data, lv;
};
int level[1010] = {0}, Max = -1;
node* inser(node* root, int k, int x){
if(root == NULL){
root = new node;
root->lchild = NULL;
root->rchild = NULL;
root->data = x;
level[k]++;
if(k > Max) Max = k;
}
else if(x <= root->data)
root->lchild = inser(root->lchild, k+1, x);
else
root->rchild = inser(root->rchild, k+1, x);
return root;
}
int main(){
int n, x;
scanf("%d", &n);
node* root = NULL;
for(int i = 0 ; i < n; i++){
scanf("%d", &x);
root = inser(root, 0, x);
}
printf("%d + %d = %d\n",level[Max], level[Max-1], level[Max] + level[Max-1] );
return 0;
}