层次遍历二叉树

2013/05/31 16:03
阅读数 148
#include <stdio.h>
#include<stdlib.h>
typedef struct Bitree
{
	int data;
	struct Bitree *Lchild,*Rchild;
}BitreeNode,*LinkBitree;

typedef struct QueueList
{
	LinkBitree data[20];
	int front,rear;
}QueueList,*LinkQueue;

LinkBitree CreatBitree();

void LevelOrderTraverse(LinkBitree);

void InitQueue(LinkQueue);

int main()
{
	LinkBitree BitreeHead;
	printf("请输入根结点的值e:");
	BitreeHead=CreatBitree();
	LevelOrderTraverse(BitreeHead);
	return 0;
}

LinkBitree CreatBitree()
{
	int e_data;
	LinkBitree BitreeHead;
	scanf("%d",&e_data);
	if(e_data!=0)
	{
		BitreeHead=(LinkBitree)malloc(sizeof(BitreeNode));
		if(BitreeHead==NULL)
		{
			printf("Error!!");
		}
		else
		{
			BitreeHead->data=e_data;
			printf("请输入结点%d的左孩子结点的值:e= ",BitreeHead->data);
	        BitreeHead->Lchild=CreatBitree();
	        printf("请输入结点%d的右孩子结点的值:e= ",BitreeHead->data);
            BitreeHead->Rchild=CreatBitree();
		}
	}
	else
	{
		BitreeHead=NULL;
	}
	return BitreeHead;
}
void LevelOrderTraverse(LinkBitree BitreeHead)
{
	LinkQueue Q;
	Q=(LinkQueue)malloc(sizeof(sizeof(QueueList)));
	InitQueue(Q);
	if(BitreeHead!=NULL)
	{
		Q->data[Q->rear]=BitreeHead;
		Q->rear=Q->rear+1;
	}
	while(Q->front!=Q->rear)
	{
		printf("%d  ",Q->data[Q->front]->data);
		if(Q->data[Q->front]->Lchild!=NULL)
		{
			Q->data[Q->rear]=Q->data[Q->front]->Lchild;
			Q->rear=Q->rear+1;
		}
		if(Q->data[Q->front]->Rchild!=NULL)
		{
			Q->data[Q->rear]=Q->data[Q->front]->Rchild;
			Q->rear=Q->rear+1;
		}
		Q->front=Q->front+1;
	}
}
void InitQueue(LinkQueue Q)
{
	Q->front=Q->rear=0;
}
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部