考查点:BST插入,DFS
思路及提交情况:水题,计算最后两层的节点数,只需维护一个层数数组,记录该层的节点数,用DFS是最简洁的,这里开始遇到bug,首先新建节点要么new要么NULL,之后记得return
#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#define FOR(i, x, y) for(int i = x; i <= y; i++)
#define rFOR(i, x, y) for(int i = x; i >= y; i--)
#define MAXN 1010
#define oo 0x3f3f3f3f
using namespace std;
int a[MAXN];
int n;
struct node{
node* lch;
node* rch;
int data;
};
void insertBST(node* &root,int x)
{
if(root==NULL){
node* t=new node;
t->lch=NULL;
t->rch=NULL;
t->data=x;
root=t;
return;
}
if(x<=root->data) insertBST(root->lch,x);
else insertBST(root->rch,x);
}
int len;
int level[MAXN];
void DFS(node* root,int lv)
{
if(root==NULL)return;
level[lv]++;
len=max(lv,len);lv++;
DFS(root->lch,lv);
DFS(root->rch,lv);
}
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL
scanf("%d",&n);
node* root=NULL;
FOR(i,1,n)
{
int x;
scanf("%d",&x);
insertBST(root,x);
}
int lv=0;
DFS(root,lv);
printf("%d + %d = %d",level[len],level[len-1],level[len]+level[len-1]);
return 0;
}