二叉树的创建及层次遍历源程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二叉树的创建及层次遍历源程序
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 50
typedef struct node
{
char data;
struct node *lchild,*rchild;
}Bitree;
void Creat_Tree(Bitree *&bt,char str[])//创建二叉树的函数
{
Bitree *stack[MAXSIZE],*p;//定义栈stack用来存储上一个结点的信息,p 为临时指针指//向二叉树的新建的结点,q为临时指针指向上一个元素
int top=-1;//top为栈的顶,并被初始化为-1
char ch;//ch为临时接受传进来的数据并接受判断
int k,j=0;//k在下循环中判断左孩子还是右孩子
bt=NULL;//初始化的树为空
ch=str[j];
while(ch!='\0')//当字符不为空时(循环终止条件)
{
switch(ch)//多分支选择结构构建二叉树
{
case'(':top++;stack[top]=p;k=1;break;
//标记左孩子,括号前元素入栈
case')':top--;break;//括号左侧树结束,根结点出栈, case',':k=2;break;//逗号后数据为右孩子
default://缺省值情况,判断其他字符
p=(Bitree *)malloc(sizeof(Bitree));//为数据开辟新空间p->data=ch;
p->lchild=p->rchild=NULL;//左右孩子赋空
if(bt==NULL)//若为空树
bt=p;//根节点赋值
else
{
switch(k)//判断左右孩子
{
case 1:stack[top]->lchild=p;break;
case 2:stack[top]->rchild=p;break;
}
}
}
j++;//进行下一个字符的判断
ch=str[j];
}
}
void levelorder(Bitree *bt)//层次遍历输出二叉树{
Bitree *queue[MAXSIZE];//定义二叉树结构体类型的队列int front,rear;//定义队头,队尾下标
if(bt==NULL)
return;//如果树为空,返回
front=-1;
rear=0;
queue[rear]=bt;
while(front!=rear)//队不为空的情况
{
front++;//队头字符元素出队
printf("%c",queue[front]->data);
printf("\n");
if(queue[front]->lchild!=NULL)//左子树为空条件下
{
rear++;//队尾字符元素入队
queue[rear]=queue[front]->lchild;//将队头的左孩子赋给队尾} if(queue[front]->rchild!=NULL)//右子树为空的条件下
{
rear++;//队尾字符元素入队
queue[rear]=queue[front]->rchild;//将队头的右孩子赋给队尾} }
}
void main()
{
char str[20];
Bitree *bt;
bt=NULL;//对二叉树进行初始化,赋空
printf("请输入需要键入二叉树的数据:\n"); scanf("%s",str);//键盘输入字符串
Creat_Tree(bt,str);//调用创建函数
printf("层次遍历输出结果为:\n"); levelorder(bt);//调用层次遍历函数
}。

相关文档
最新文档