#include<stdio.h>
#include<stdlib.h>
typedef struct BitNode{
int data;
struct BitNode *lchild,*rchild;
}BitNode,*BiTree;
typedef struct Queue{
BitNode p;
struct Queue next;
}Queue;
void createTree(BiTree *T)
{
T=(BitNode)malloc(sizeof(BitNode));
(*T)->data=1;
(T)->lchild=(BitNode)malloc(sizeof(BitNode));
(*T)->lchild->data=2;
(T)->rchild=(BitNode)malloc(sizeof(BitNode));
(*T)->rchild->data=3;
(T)->rchild->lchild=(BitNode)malloc(sizeof(BitNode));
(*T)->rchild->lchild->data=6;
(T)->rchild->rchild=(BitNode)malloc(sizeof(BitNode));
(*T)->rchild->rchild->data=7;
(T)->lchild->lchild=(BitNode)malloc(sizeof(BitNode));
(*T)->lchild->lchild->data=4;
(T)->lchild->rchild=(BitNode)malloc(sizeof(BitNode));
(*T)->lchild->rchild->data=5;
(*T)->lchild->lchild->lchild=NULL;
(*T)->lchild->lchild->rchild=NULL;
(*T)->lchild->rchild->lchild=NULL;
(*T)->lchild->rchild->rchild=NULL;
(T)->rchild->lchild->lchild=NULL;
(T)->rchild->lchild->rchild=NULL;
(T)->rchild->rchild->lchild=NULL;
(T)->rchild->rchild->rchild=NULL;
}
Queue initQueue()
{
Queue head=(Queue)malloc(sizeof(Queue));
head->next=NULL;
return head;
}
Queue EnQueue(Queue *rear,BitNode t)
{
Queue p=(Queue)malloc(sizeof(Queue));
p->p=t;
p->next=NULL;
rear->next=p;
rear=p;
return rear;
}
Queue DeQueue(Queue *head,Queue *rear)
{
if(head->nextNULL)
{
printf(“队列为空\n”);
return head;
}
Queue *d=head->next;
if(head->nextrear)
{
rear=head;
}
head->next=head->next->next;
free(d);
return rear;
}
void layOrder(BiTree T)//层次遍历
{
Queue *head=initQueue();//创建头结点
Queue *rear=head;//初始化
BitNode *p;
rear=EnQueue(rear,T);
Queue *temp=head->next;
while(temp)
{
p=temp->p;
if(p->lchild)
{
rear=EnQueue(rear,p->lchild);//如果指针值改变了需要返回,不然会错误
}
if(p->rchild)
{
rear=EnQueue(rear,p->rchild);
}
printf("%d ",p->data);
rear=DeQueue(head,rear);
temp=head->next;
}
printf("\n");
}
int main()
{
BiTree T;
createTree(&T);
layOrder(T);
printf("%d\n",T->lchild->lchild->data);
return 0;
}