2020-08-27

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->rchild
NULL) //如果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(p
NULL) printf(“待查找数据不存在\n”,key);//循环结束后,若p为空则待查找数据不存在;否则待查找数据存在
else printf(“待查找数据存在\n”,key);
printf("\n");
}

void Inorder(BiTNode *B,SeqStack &K) //二叉树的中序遍历函数
{
printf(“中序遍历结果为:”); //提示以下结果为中序遍历结果
BiTNode *p; //p指针指向当前结点
p=B; ## 二叉排序树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值