#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define status int
typedef struct node
{
int data;
struct node *next;
struct node *lchild;
struct node *rchild;
struct node *front;
struct node *rear;
}qlink,*sq;
int r=0;
qlink *q;
void createbitree(sq &T)
{
char ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else
{
T=(qlink *)malloc(sizeof(qlink));
T->data=ch;
if(r==0)
{
q=T;
r=1;
}
createbitree(T->lchild);
createbitree(T->rchild);
}
}
sq initqueue(qlink *L)
{
L=(qlink *)malloc(sizeof(qlink));
L->front=L->rear=(qlink *)malloc(sizeof(qlink));
L->front->next=NULL;
return L;
}
status emptyqueue(qlink *L )
{
if(L->front==L->rear)
return 1;
else
return 0;
}
sq enqueue(qlink *L,qlink *p)
{
p->next=NULL;
L->rear->next=p;
L->rear=p;
return L;
}
status outqueue(qlink *L)
{
qlink *p;
if(L->front==L->rear)
{
return 0;
}
p=L->front->next;
L->front->next=p->next;
if(L->rear==p)
L->rear=L->front;
return 1;
}
void levellist(qlink *T1)
{
qlink *L;
qlink *p;
qlink *u;
p=T1;
L=initqueue(L);
if(T1)
L=enqueue(L,T1);
while(!emptyqueue(L))
{
outqueue(L);
printf("%c ",p->data);
if(p->lchild)
{
L=enqueue(L,p->lchild);
}
if(p->rchild)
{
L=enqueue(L,p->rchild);
}
p=L->front->next;
}
}
int main()
{
sq t;
printf("createbitree:\n");
createbitree(t);
printf("Non recursive level traversal:\n");
levellist(q);
return 0;
}
二叉树非递归层次遍历
最新推荐文章于 2022-04-02 00:41:03 发布