1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#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   吉大依恋  阅读(216)  评论(0编辑  收藏  举报
努力加载评论中...

点击右上角即可分享
微信分享提示