①背会了平衡二叉树,查找二叉树就太简单了
②层序编号用dfs不错,代码简洁
③本题写了三个递归函数,,
void getlevel(node* root, int lev) {
if (root == NULL)
return;
root->level = lev;
getlevel(root->left, lev + 1);
getlevel(root->right, lev + 1);
}
#include<bits/stdc++.h>
using namespace std;
int n,depth=0,n1,n2;
struct node{
int v,level;
node *left=NULL,*right=NULL;
}*root;
vector<node*> v1;
void insert(node* &root,int v){
if(root==NULL){
root=new node;
root->v=v;
return;
}
if(v>root->v){
insert(root->right,v);
}
else
insert(root->left,v);
}
void getlevel(node* root, int lev) {
if (root == NULL)
return;
root->level = lev;
if(lev>depth) depth=lev;
getlevel(root->left, lev + 1);
getlevel(root->right, lev + 1);
}
void getnum(node* root,int d){
if(root==NULL)
return;
if(root->level==d)
v1.push_back(root);
getnum(root->left,d);
getnum(root->right,d);
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
int t;
cin>>t;
insert(root,t);
}
getlevel(root,0);
getnum(root,depth);
cout<<v1.size()<<" + ";
n1=v1.size();
v1.clear();
getnum(root,depth-1);
cout<<v1.size()<<" = "<<n1+v1.size()<<endl;
return 0;
}