本文在由层次遍历构造二叉树的基础上写的
二叉树前序、中序、后序遍历(递归实现和非递归实现)点这里
正式开始打代码前的一些小知识
层次遍历需要借助队列实现,队列的链式实现点这里
代码部分
结构体
//二叉树的数据结构
typedef struct BiTNode{
BiElemType Bidata;
struct BiTNode* lchild;
struct BiTNode* rchild;
}BiTNode, *BiTree;
typedef BiTree ElemType;
//队列的数据结构
typedef struct LinkQueueNode {
ElemType data;
struct LinkQueueNode* next;
}LinkQueueNode;
typedef struct {
LinkQueueNode* front, * rear;
}LinkQueue;
代码部分
自己写的
//层次遍历
void LevelOrder(BiTree T)
{
ElemType out;
LinkQueue Q;
InitQueue(Q);
BiTree p = T;
while (p || !IsEmpty(Q))
{
if (p == T)
{
EnQueue(Q, p);
}
if (p)
{
if (p->lchild != NULL)
{
EnQueue(Q, p->lchild);
}
if (p->rchild != NULL)
{
EnQueue(Q, p->rchild);
}
}
DeQueue(Q, out);
putchar(out->Bidata);
GetHead(Q, p);
if (!GetHead(Q, p))
{
p = NULL;
}
}
}
王道代码(比我的简洁太多)
void LevelOrder(BiTree T)
{
LinkQueue Q;
InitQueue(Q);
BiTree p;
EnQueue(Q,T);//树根入队
while(!IsEmpty(Q))
{
DeQueue(Q,p);
putchar(p->c);
if(p->lchild!=NULL)
EnQueue(Q,p->lchild);
if(p->rchild!=NULL)
EnQueue(Q,p->rchild);
}
}
打代码过程遇到的困难
无。不过代码还是要更简洁易懂。