用一个队列实现了二叉树的层序遍历
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
using namespace std;
#define null -1
struct TreeNode
{
int Element;
int right,left;
}T1[100];
int Buildtree(struct TreeNode T[])
{
int n,chick[100],root;
char left,right;
cin>>n;
if(n)
{
for(int i=0;i<n;i++)
chick[i]=0;
for(int i=0;i<n;i++)
{
T[i].Element=i;
cin>>left>>right;
if(left != '-')
{
T[i].left=left-'0';
chick[T[i].left]=1;
}
else
T[i].left=-1;
if(right != '-')
{
T[i].right=right-'0';
chick[T[i].right]=1;
}
else
T[i].right=-1;
}
for(int i=0;i<n;i++)
{
if(chick[i]==0)
{
root=i;
break;
}
}
}
else
root=-1;
return root;
}
int flag=0;
/*void pretravel(int bt)
{
if(bt>=0)
{
pretravel(T1[bt].left);
if(T1[bt].left==null &&T1[bt].right==null)
{
if(flag)
cout<<" ";
cout<<bt;
flag++;
}
pretravel(T1[bt].right);
}
}*/
void leveltravel(int bt)
{
queue<int> q;
int t;
if(bt<0)
return;
q.push(bt);
while(!q.empty())
{
int tmp=q.front();
q.pop();
if(T1[tmp].left!=null)
q.push(T1[tmp].left);
if(T1[tmp].right!=null)
q.push(T1[tmp].right);
if(T1[tmp].left==null && T1[tmp].right==null )
{
if(flag)
cout<<" ";
cout<<tmp;
flag++;
}
}
}
int main()
{
int Root;
Root=Buildtree(T1);
leveltravel(Root);
}