提示:二叉排序树根结点大于左结点,小于右结点,这样创建一颗树就好了
#include<iostream>
#include<stdlib.h> using namespace std; typedef struct node { int data; struct node *l,*r; }Tree; int flag=0,obj=0;//flag作用判断是否寻找到,obj计算比较次数。 void creat(Tree *&l,int num)//创建二叉搜索树。 { if(l==NULL) { l=(Tree *)malloc(sizeof(Tree)); l->data=num; l->l=l->r=NULL; return ; } if(l->data<num) creat(l->l,num); else creat(l->r,num); } void fun(Tree *&l,int num) { obj++;//每比较一次计数+1. if(l==NULL) return ; else if(l->data<num) fun(l->l,num); else if(l->data>num) fun(l->r,num); else if(l->data==num) { flag=1; return ; } } int main() { Tree *l; l=(Tree *)malloc(sizeof(Tree)); int n,m; cin>>n; cin>>m; l->data=m; l->l=l->r=NULL; for(int i=1;i<n;i++) { cin>>m; creat(l,m); } cin>>m; fun(l,m); if(flag) cout<<obj; else cout<<"-1"; return 0; }