要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;
//源代码:
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
typedef char TElemType;
typedef int Status;
typedef struct BiTNode{
TElemType data;
struct BiTNode*lchild,*rchild;
}BiTNode,*BiTree;
/*先序创建二叉树*/
void CreateBiTree(BiTree *T)
{
char ch;
ch=getchar();
if(ch=='#')(*T)=NULL; /*#代表空指针*/
else
{
(*T)=(BiTree)malloc(sizeof(BiTNode)); /*申请结点*/
(*T)->data=ch; /*生成根结点*/
CreateBiTree(&(*T)->lchild); /*构造左子树*/
CreateBiTree(&(*T)->rchild); /*构造右子树*/
}
}
/*先序输出二叉树*/
void PreOrder(BiTree T)
{
if(T)
{
printf("%2c",T->data); /* 访问根节点,此处简化为输出根结点的数据值*/
PreOrder(T->lchild); /* 先序遍历左子树*/
PreOrder(T->rchild); /* 先序遍历右子树*/
}
}
/*层次遍历二叉树T,从第一层开始,每层从左到右遍历*/
void LevelOrder(BiTree T)
{BiTree Queue[MAX],b; /*用一维数组表示队列, front和reae分别表示队首和队尾指针*/
int front,rear;
front=rear=0;
if(T) /*若数为空*/
{
Queue[rear++]=T; /*根节点入队列*/
while(front!=rear) /*当队列非空*/
{
b=Queue[front++]; /* 队首元素出对列,并访问这个结点*/
printf("%2c",b->data);
if(b->lchild!=NULL)Queue[rear++]=b->lchild;
if(b->rchild!=NULL)Queue[rear++]=b->rchild;
}
}
}
void main()
{
BiTree T=NULL;
printf("\n 创建一颗二叉树:\n");
CreateBiTree(&T); /*建立一颗二叉树*/
printf("\n 先序遍历结果为:\n");
PreOrder(T); /*先序遍历二叉树*/
printf("\n 层次遍历结果为:\n");
LevelOrder(T); /*层次遍历二叉树*/
}