1、 输入一数据序列,根据输入的数据序列创建一棵二叉排序树(二叉链表);
2、 在已创建的二叉排序树中查找“37”和“66”两个结点,并给出相应的查询结果。
输入数据序列:45,24,53,12,37,93。
输出二叉排序树的中序遍历序列:12,24,37,45,53,93;
输入要查找的数据:37, 输出查找的结果:该结点已找到。
输入要查找的数据:93, 输出查找的结果:该结点未找到。
#include<bits/stdc++.h>
#include<queue>
#include<stack>
#include<conio.h>
#define N 100
using namespace std;
typedef struct node{
int date;
struct node *lchild,*rchild;
}Node,*BST;
bool BSTInsert(BST &T,int date)
{
if(T == NULL)
{
T=new Node;
T->date=date;
T->lchild=T->rchild = NULL;
return true;
}
if(date == T->date)
return false;
else if(date > T->date)
return BSTInsert(T->rchild,date);
else if(date < T->date)
return BSTInsert(T->lchild,date);
}
void CreatBST(BST &T)
{
T=NULL;
int date,n;
cout << "请输入数据个数:";
cin >> n;
cout <<"请输入数据:";
for(int i=1;i<=n;i++)
{
cin >> date;
BSTInsert(T,date);
}
}
void InOrderTreaverse(BST T)
{
if(T)
{
InOrderTreaverse(T->lchild);
cout << T->date << " ";
InOrderTreaverse(T->rchild);
}
}
void BST_Search(BST T,int k)
{
if(T==NULL)
{
cout << "该结点未找到!\n" << endl;
return ;
}
else if(T->date==k)
{
cout << "该结点已找到!\n" << endl;
return ;
}
else if(T->date < k)
return BST_Search(T->rchild,k);
else if(T->date > k)
return BST_Search(T->lchild,k);
}
int main()
{
BST T;
CreatBST(T);
InOrderTreaverse(T);
cout << "\n" << endl;
cout << "查找操作,按 Ctrl+z 结束\n" <<endl;
int k;
cout << "请输入要查找的的数据:";
while(~scanf("%d",&k))
{
BST_Search(T,k);
cout << "请输入要查找的的数据:";
}
return 0;
}
//45 24 53 12 37 93