二叉排序树具体可以百度,亲测百度代码不错。
讲一下解题步骤:
1.创建第一个结点;
2.利用递归,比结点小的放在L_Kid,比结点大的放在R_Kid;
----------------------------------------------
12
25 18 46 2 53 39 32 4 74 67 60 11
74
-----------------------------------------------
4
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int cnt=0,flag=0;
typedef struct node
{
int data;
struct node *L_Kid,*R_Kid;
}Tree;
void TreeHead(Tree *&T)
{
T=(Tree *)malloc(sizeof(Tree));
T->L_Kid=T->R_Kid=NULL;//创建出根结点;
cin>>T->data;
}
void initTree(Tree *&T,int insert)
{
if(T==NULL)
{
T=(Tree *)malloc(sizeof(Tree));
T->L_Kid=T->R_Kid=NULL;
T->data=insert;
return;
}
if(T->data<insert)
{
initTree(T->R_Kid,insert);
}
else if(T->data>insert)
{
initTree(T->L_Kid,insert);
}
}
void find(Tree *&T,int tar)
{
if(T==NULL) return;
cnt++;
if(tar==T->data)
{
cout<<cnt;
flag=1;
return;
}
else if(tar<T->data)
{
find(T->L_Kid,tar);
}
else if(tar>T->data)
{
find(T->R_Kid,tar);
}
}
int main()
{
int sum;
cin>>sum;
Tree *T;
TreeHead(T);
int i,data_;
for(i=2;i<=sum;i++)
{
cin>>data_;
initTree(T,data_);
}
int k;
cin>>k;
find(T,k);
if(flag==0) cout<<"-1";
return 0;
}