#include <stdio.h>
#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef int KeyType;//关键字类型为int
typedef struct{
KeyType key; //关键字域
//InfoType otherinfo ;其他域按需定义
}TElemType; //每个结点的数据域的类型
typedef struct BiTNode{
TElemType data; //每个结点的数据域(包括关键字项)
struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
void InsertBST(BiTree &T,TElemType e){
//当T中不存在关键字等于e.key的数据元素时,将 e插入到二叉树排序树T中
if(T==NULL) //找到插入位置,递归结束
{
BiTree S=new BiTNode; //生成新结点*S
S->data=e; //新结点*S的数据域置为e
S->lchild=S->rchild=NULL; //新结点*S作为叶子节点
T=S; //把新结点链接到已找到的插入位置
}
else if(e.key<T->data.key) //将*S插入左子树
InsertBST(T->lchild,e);
else if(e.key>T->data.key) //将*S插入右子树
InsertBST(T->rchild,e);
}//InsertBST
void CreateBST(BiTree &T){
//建立一棵二叉排序树,0表示输入结束
cout<<"\n建立一棵二叉排序树(0表示输入结束):\n";
TElemType e;
T=NULL;
cin>>e.key;
while (e.key!=0){
InsertBST(T,e);
cin>>e.key;
}//while
}
void InOrder(BiTree T){
//中序遍历二叉排序树
if(T==NULL) return ;
else
{
InOrder(T->lchild);
cout<<T->data.key;
InOrder(T->rchild);
}
}
BiTree SearchBST(BiTree T,KeyType key){
//在二叉排序树中查找关键字为key的元素,若查找成功,返回结点指针,否则,返回NULL.
if(T==NULL||T->data.key==key)
return T;
else
{
if(key<T->data.key)
return SearchBST(T->lchild,key);
else
return SearchBST(T->rchild,key);
}
}
int main(){
BiTree T;
int choice,a;
KeyType key;
CreateBST(T); //建立一棵二叉排序树
do{
cout<<"\n\n 二叉排序树的基本操作 \n";
cout<<"===============================\n";
cout<<" 1:中序遍历\n";
cout<<" 2:查找\n";
cout<<" 3:插入\n";
cout<<" 0:退出\n";
cout<<"===============================\n";
cout<<"输入你的选择:";
cin>>choice;
switch (choice){
case 1: cout<<"中序遍历的结果为:";
InOrder(T);
break;
case 2: cout<<"待查找数据值为:";
cin>>key;
if(SearchBST(T,key)!=NULL)
//cout<<"数据值"<<key<<"在树中位置为:"<<SearchBST(T,key);
cout<<"查找成功!";
else
cout<<"该数据值不存在!";
break;
case 3: TElemType e;
cout<<"待插入数据值为:";
cin>>e.key;
InsertBST(T,e);
cout<<"插入后的结果为:";
InOrder(T);
break;
case 0:
break;
default:
cout<<"\n重新输入选择!";
break;
}
}while (choice);
return 0;
}