传送门
动态链表实现
#include<stdio.h>
#include<queue>
using namespace std;
#define MAX_N 1100
typedef struct Node{
int data;
Node *lchild,*rchild;
int level;
}bsnode,*BStree;
int n;
int level[MAX_N];
void insert(BStree &root,int data){
if(root==NULL){
root=new bsnode;
root->data=data;
root->lchild=NULL;
root->rchild=NULL;
return ;
}
if(data<=root->data) insert(root->lchild,data);
else insert(root->rchild,data);
}
//void in(BStree root){
// if(root==NULL)
// return;
// in(root->lchild);
// printf("%d ",root->data);
// in(root->rchild);
//}
void bfs(BStree root){
queue <bsnode*> q;
root->level=0;
q.push(root);
int max=-1;
while(!q.empty()){
bsnode *node=q.front();
q.pop();
if(node->level>max){
max=node->level;
}
if(node->lchild!=NULL){
(node->lchild)->level=(node->level)+1;
q.push(node->lchild);
}
if(node->rchild!=NULL){
(node->rchild)->level=(node->level)+1;
q.push(node->rchild);
}
level[node->level]++;
}
printf("%d + %d = %d\n",level[max],level[max-1],level[max]+level[max-1]);
}
int main(){
scanf("%d",&n);
int data;
BStree root=NULL;
for(int i=0;i<n;i++){
scanf("%d",&data);
insert(root,data);
}
//in(root);
bfs(root);
}
静态链表实现
#include<stdio.h>
#include<queue>
using namespace std;
#define MAX_N 1100
struct Node{
int data;
int lchild,rchild;
int level;
}node[MAX_N];
int n;
void insert(int i,int &root){
if(root==-1){
root=i;
return ;
}
else{
if(node[i].data<=node[root].data) insert(i,node[root].lchild);
else insert(i,node[root].rchild);
}
}
void in(int root){
if(root==-1)
return;
in(node[root].lchild);
printf(" %d",node[root].data);
in(node[root].rchild);
}
void bfs(int root){
queue<int> q;
int max=-1;
node[root].level=1;
q.push(root);
while(!q.empty()){
int p=q.front();
q.pop();
if(node[p].level>max){
max=node[p].level;
}
if(node[p].lchild!=-1){
node[node[p].lchild].level=node[p].level+1;
q.push(node[p].lchild);
}
if(node[p].rchild!=-1){
node[node[p].rchild].level=node[p].level+1;
q.push(node[p].rchild);
}
}
int n1=0,n2=0;
for(int i=0;i<n;i++){
if(node[i].level==max){
n1++;
}
if(node[i].level==max-1){
n2++;
}
}
printf("%d + %d = %d",n1,n2,n1+n2);
}
int main(){
int num;
int root=-1;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num);
node[i].data=num;
node[i].lchild=node[i].rchild=-1;
insert(i,root);
}
bfs(root);
}