建立二叉树,层序、先序遍历

要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;

//源代码:
#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);                /*层次遍历二叉树*/
}

猜你喜欢

转载自blog.csdn.net/markin2333/article/details/81205482