C语言 数据结构 二叉树参差遍历程序错误
发布网友
发布时间:2022-07-19 11:42
我来回答
共2个回答
热心网友
时间:2023-10-15 23:45
//#include <cstdlib>
//#include <iostream>
#include<stdio.h>
#include<malloc.h>
typedef int DataType;/*元素的数据类型*/
typedef struct node
{
DataType data;
struct node *lchild,*rchild;
}BitTNode,*BiTree;
typedef struct Lnode
{
BitTNode* data;
struct Lnode *next;
}linklist;
typedef struct
{
linklist *front,*rear;
}linkqueue;
linkqueue *q;
void InitQueue(linkqueue *q)//生成空链队
{
q->front = (linklist *)malloc(sizeof(linklist));
q->front->next = NULL;
q->rear = q->front;
}
int QueueEmpty(linkqueue *q)//判断空
{
if(q->front==q->rear)
return 1;
else
return 0;
}
void InQueue(linkqueue *q,BitTNode* x)//将X插入到队尾
{
q->rear->next=(linklist *)malloc(sizeof(linklist));
q->rear->next->data=x;
q->rear=q->rear->next;
q->rear->next=NULL;
}
BitTNode* DeQueue(linkqueue *q)//删除队头元素并返回该元素的值
{
linklist *s;BitTNode* e;
if(QueueEmpty(q)) return NULL;
s=q->front->next;e=s->data;
if(s==q->rear)q->front=q->rear;//如果只有一个结点,出队后队列为空
else q->front->next=s->next;
free(s);
return e;
}
BitTNode * creat()
{
BitTNode *t;
DataType x;
scanf("%d",&x);
if(x==0) t=NULL;
else
{
t=(BitTNode *)malloc(sizeof(BitTNode));
t->data=x;
t->lchild=creat();
t->rchild=creat();
}
return(t);
}/*creat*/
/*. 层次遍历二叉树的非递归算法*/
void levelorder(BitTNode* root)
{
if(root==NULL)return ;
else{
linklist* rear;
BitTNode* p;
//SqQueue queue;
p=root;
InitQueue(q);
//initQueue(&queue); //创建一个队列
InQueue(q,p);
//EnQueue(&queue,p); //将根结点入队
while(QueueEmpty(q)!=1) //当队列不为空时
{
//记下每一层开始时队尾的位置(即每一层遍历的终止位置)
rear=q->rear;
while(q->front!=rear) //每一次循环遍历一层
{
//p=OutQueue(&queue); //出队
p=DeQueue(q);
printf("%3d",p->data); //输出数据
if(p->lchild!=NULL) //将该结点的结点入队
//EnQueue(&queue,p->lchild);
InQueue(q,p->lchild);
if(p->rchild!=NULL)
//EnQueue(&queue,p->rchild);
InQueue(q,p->rchild);
}
}
}
}
main()
{
BitTNode* root;
root=creat();
printf("\n层次顺序遍历二叉树");
levelorder(root);
system("pause");
}
热心网友
时间:2023-10-15 23:46
http://blog.csdn.net/huangsir2011/article/details/8121077
http://blog.csdn.net/huangsir2011/article/details/8108522