二叉搜索树的遍历,用DFS方法即可
代码如下
#include<cstdio>
#include<vector>
using namespace std;
struct Node{
int data;
Node* lchild;
Node* rchild;
};
void insert(Node* &root,int data){
if(root==NULL){
root=new Node;
root->data=data;
root->lchild=root->rchild=NULL;
return;
}
if(data>root->data)insert(root->lchild,data);
else insert(root->rchild,data);
}
vector<int>num(1000);
int maxdepth=-1;
void DFS(Node* root,int depth){
if(root==NULL){
maxdepth=max(depth,maxdepth);
return;
}
num[depth]++;
DFS(root->lchild,depth+1);
DFS(root->rchild,depth+1);
}
int main(){
int n;
scanf("%d",&n);
Node* root;
int a;
for(int i=0;i<n;i++){
scanf("%d",&a);
insert(root,a);
}
DFS(root,0);
printf("%d + %d = %d\n",num[maxdepth-1],num[maxdepth-2],num[maxdepth-1]+num[maxdepth-2]);
return 0;
}
另一种方法
#include<bits/stdc++.h>
using namespace std;
int n,maxlevel=-1,now,cnt1=0,cnt2=0;
struct Node{
int data,d;
Node* lchild;
Node* rchild;
};
void insert(Node* &root,int data,int level){
if(root==NULL){
root=new Node;
root->data=data;
root->d=level;
if(level>maxlevel)maxlevel=level;
root->rchild=root->lchild=NULL;
return;//注意一定要写return;
}
if(data>root->data)insert(root->rchild,data,level+1);
else insert(root->lchild,data,level+1);
}
void DFS(Node* root){
if(root==NULL)return;
if(root->d==maxlevel)
cnt1++;
else if(root->d==maxlevel-1)
cnt2++;
DFS(root->lchild);
DFS(root->rchild);
}
int main(){
int num;
cin>>n;
Node* root=NULL;
for(int i=0;i<n;i++)
{ cin>>num;
insert(root,num,0);}
DFS(root);
printf("%d + %d = %d",cnt1,cnt2,cnt1+cnt2);
return 0;
}