# 二叉树的递归遍历以及层次遍历

210人阅读 评论(0)

#include <stdio.h>
#include <stdlib.h>

#define ERROR 0
#define OK 1

typedef char TElemType;
typedef int Status;

//二叉树的二叉链表存储表示
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

//定义链式队列结点
typedef struct QNode
{
BiTree Queuedata;
struct QNode * next;
}QNode,* QueuePtr;
//定义链式队列
typedef struct
{
QueuePtr front;
QueuePtr rear;

//按照先序次序构造二叉树
Status CreatBiTree(BiTree &T)
{char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
return ERROR;
T->data=ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
return OK;
}
//递归先序遍历二叉树
Status PreOrder ( BiTree T )
{
if ( T!=NULL)
{
printf("%c",T->data);
PreOrder ( T->lchild );
PreOrder ( T->rchild );
}
return OK;
}

//递归中序遍历二叉树
Status InOrder ( BiTree T )
{
if ( T!=NULL)
{
InOrder ( T->lchild );
printf("%c",T->data);
InOrder ( T->rchild );
}
return OK;
}

//递归后序遍历二叉树
Status LastOrder ( BiTree T )
{
if (T!=NULL)
{
LastOrder( T->lchild );
LastOrder( T->rchild );
printf("%c",T->data);
}
return OK;
}

//初始化一个带头结点的队列
{
Q.front=(QNode*)malloc(sizeof(QNode));
if (!Q.front)
return ERROR;
Q.rear=Q.front;
Q.front->next=NULL;
return OK;
}

//入队列
{
QueuePtr s=(QueuePtr)malloc(sizeof(QNode));
if (!s)
return ERROR;
s->Queuedata=e;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
return OK;

}
//出队
{
char data1;
QueuePtr s;
s=Q.front->next;
e=s->Queuedata;
data1=e->data;
Q.front->next=s->next;
if(Q.rear==s)
Q.rear=Q.front;
free(s);

return OK;
}
//队列的判断空操作
{

if (Q.front->next==NULL)
return OK;
else return ERROR;

}
//按层次遍历
Status LevelBiTree(BiTree T)
{

InitQueue(Q);
BiTree p = T;
if (T == NULL) return ERROR;

EnQueue(Q,p);

while (!QueueEmpty(Q))
{   DelQueue(Q, p);
printf("%C",p->data);

if (p->lchild)
EnQueue(Q, p->lchild);
if (p->rchild)
EnQueue(Q, p->rchild);
}

return OK;
}

int main()
{BiTree T;
printf("按照先序次序输入二叉树中结点的值.\n");
CreatBiTree(T);
printf("先序遍历二叉树:");
PreOrder(T);printf("\n");
printf("中序遍历二叉树:");
InOrder(T);printf("\n");
printf("后序遍历二叉树:");
LastOrder(T);printf("\n");
printf("按层次遍历二叉树:");
LevelBiTree(T);printf("\n");
return 0;
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：2809次
• 积分：74
• 等级：
• 排名：千里之外
• 原创：5篇
• 转载：1篇
• 译文：0篇
• 评论：0条
文章存档
评论排行