#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; }