题目描述
链接
输出一个二叉搜索树的最后两层结点个数a和b,以及他们的和
分析
- 用链表存储,建立,注意一定记住insert &加引用,以及root=NULL时新建结点的几个操作
- dfs求cnt[layer]
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;
node *lchild, *rchild;
};
const int maxn = 1e3+5;
int a[maxn], n;
void insert(node *&root, int x){
if(!root){
root = new node;
root->data = x;
root->lchild = NULL;
root->rchild = NULL;
return;
}
if(x > root->data) insert(root->rchild, x);
else insert(root->lchild, x);
}
node *create(){
node *root = NULL;
for(int i=0;i<n;i++){
insert(root, a[i]);
}
return root;
}
int cnt[maxn],maxlayer;
void dfs(node *root, int layer){
if(!root) return;
cnt[layer]++;
if(maxlayer < layer) maxlayer = layer;
dfs(root->lchild, layer+1);
dfs(root->rchild, layer+1);
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
node *root = create();
dfs(root, 0);
int ans = cnt[maxlayer] + cnt[maxlayer-1];
cout<<cnt[maxlayer]<<" + "<<cnt[maxlayer-1]<<" = "<<ans<<endl;
}