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

  

posted on 2012-11-16 21:25  吉大依恋  阅读(212)  评论(0编辑  收藏  举报