分层遍历二叉树

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

  

转载于:https://www.cnblogs.com/yanglf/archive/2012/11/16/2774041.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值