include<stdio.h>
include<stdlib.h>
typedef struct node //二叉树结点的类型描述
{
char data; //data用于存储二叉树中的字母
struct node *lchild; //lchild为指向该结点左孩子的指针
struct node *rchild; //rchild为指向该结点下一层的指针
}BiTNode;
typedef struct //顺序栈的类型描述
{
BiTNode *pin[40]; //指针数组,用于存储广义表结点指针
int top; //栈顶指针
}SeqStack;
void Create(BiTNode *B) //建立二叉排序树的函数
{
int m;
char r;
BiTNode *p,*q; //定义指向当前结点的指针p,新结点的指针q
p=NULL; //初始时p为空
printf(“请输入顶点数据:”);
while(r!=’\n’) //输入回车表示循环结束
{
scanf("%d%c",&m,&r); //输入结点数据
if(pNULL) //第一个数据置到根节点,p指针指向根结点
{
B->data=m;
p=B;
}
else //对于其它数据执行以下操作
{
q=(BiTNode *)malloc(sizeof(BiTNode)); //申请新结点q
q->data=m; //令该数据存入当前结点的data域
q->lchild=NULL;q->rchild=NULL; //令新结点q的lchild域和rchild域为空
p=B;
while(p->data!=q->data) //当p指针所指结点和q指针所指结点中的数据不同时执行以下操作
{
if(p->datadata) //如果p结点数据小于新结点q中的数据,执行以下操作
{
if(p->rchildNULL) //如果p的右孩子为空,令p的右孩子为q
p->rchild=q;
p=p->rchild; //将p的右孩子赋p
}
else //如果p结点数据大于新结点q中的数据,执行以下操作
{
if(p->lchildNULL) //如果p的左孩子为空,令p的左孩子为q
p->lchild=q;
p=p->lchild; //将p的左孩子赋p
}
}
}
}
}
void Search(BiTNode *B,int key) //查找函数
{
BiTNode *p; //定义指向当前结点的指针p
p=B; //初始时p指向根结点
while(p!=NULL&&p->data!=key) //当p不为空且p所指结点的数据不为待查找数据时,执行以下操作
{
if(p->data<key) //如果当前结点中的数据小于待查找数据,则令p指向它的右孩子
p=p->rchild;
else //如果当前结点中的数据大于待查找数据,则令p指向它的左孩子
p=p->lchild;
}
if(pNULL) printf(“待查找数据不存在\n”,key);//循环结束后,若p为空则待查找数据不存在;否则待查找数据存在
else printf(“待查找数据存在\n”,key);
printf("\n");
}
void Inorder(BiTNode *B,SeqStack &K) //二叉树的中序遍历函数
{
printf(“中序遍历结果为:”); //提示以下结果为中序遍历结果
BiTNode *p; //p指针指向当前结点
p=B; ## 二叉排序树