#include<iostream>
#include<queue>
using namespace std;
struct Node
{
int data; //节点中的数据
Node* lChild; //左子指针
Node* rChild; //右子指针
};
void PrintNodeByLevel(Node* root)//root,二叉树的根节点
{
int cur=0,last=0,count=0;//cur记录当前处理队列中的第几个元素,last记录当前处理行中最后一个元素是第几个要被遍历的元素,count记录当前队列中共有多少元素
queue<Node*> q;
Node* r=root;
q.push(r);
last++;
count++;
while(!q.empty())
{
Node* temp=q.front();
if(temp->lChild!=NULL)
{
q.push(temp->lChild);
count++;
}
if(temp->rChild!=NULL)
{
q.push(temp->rChild);
count++;
}
q.pop();
cout<<temp->data<<" ";
cur++;
if(cur==last)
{
cout<<endl;
last=count;
}
}
}
int main()
{
Node* r=new Node();
r->data=1;
r->lChild=NULL;
r->rChild=NULL;
Node* p=new Node();
p->data=2;
p->lChild=NULL;
p->rChild=NULL;
Node* q=new Node();
q->data=3;
q->lChild=NULL;
q->rChild=NULL;
r->lChild=p;
r->rChild=q;
Node* s=new Node();
s->data=4;
s->lChild=NULL;
s->rChild=NULL;
Node* h=new Node();
h->data=5;
h->lChild=NULL;
h->rChild=NULL;
p->lChild=s;
p->rChild=h;
Node* c=new Node();
c->data=6;
c->lChild=NULL;
c->rChild=NULL;
q->rChild=c;
Node* d=new Node();
d->data=7;
d->lChild=NULL;
d->rChild=NULL;
Node* f=new Node();
f->data=8;
f->lChild=NULL;
f->rChild=NULL;
h->lChild=d;
h->rChild=f;
PrintNodeByLevel(r);
system("pause");
return 0;
}