二叉树的层次遍历-C++语言
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
#define MAXQSIZE 100
typedef struct BiNode{
int data;
struct BiNode *lchild,*rchild;
int Ltag,Rtag;
}BiTNode,*BiTree;
typedef struct{
struct BiNode* base[100];
int front,rear;
}SqQueue;
void CreateBiTree(BiTree &T)//先序遍历创建二叉树
{
char ch;
scanf("%c",&ch);//与上面的不同行
if(ch=='@'){T=NULL;}
else{
T=(BiTree)malloc(sizeof(BiNode));//创建节点
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void LevelOrderTraverse(BiTree T)
{ BiTree p;
SqQueue Q;
Q.rear=Q.front=0;
if (T){ Q.base[Q.rear]=T;
Q.rear=(Q.rear+1)%MAXQSIZE;
while (Q.front !=Q.rear)
{ p=Q.base[Q.front];
printf("%c",p->data);
Q.front=(Q.front+1)%MAXQSIZE;
if (p->lchild)
{ Q.base[Q.rear]=p->lchild;
Q.rear=(Q.rear+1)%MAXQSIZE;}
if (p->rchild)
{ Q.base[Q.rear]=p->rchild;
Q.rear=(Q.rear+1)%MAXQSIZE;} } }
}
int main(int argc, const char * argv[])
{
BiTree Tree;
CreateBiTree(Tree);
LevelOrderTraverse(Tree);
return 0;
}