二叉树的层次遍历

  进行层次遍历时,对某一层的节点访问完后,再按照对它们的访问次序对各个节点的左右节点的左右孩子顺序访问。这样一层一层进行,先访问的节点其左右孩子也要先访问,与队列的操作原则较吻合。因此层次遍历算法采用一个环形队列来实现。

层次遍历的过程:

  先将根节点进队,在队不为空时循环:从队列中出列一个节点*p,访问它;若它有左孩子节点,将左孩子节点进队;若它有右孩子节点,将右孩子进队。如此操作直到队为空。算法如下:

 1 void LevelOrder(tree *root)
 2 {
 3     tree *p;
 4     tree *que[fb];//定义环形队列,存放节点指针
 5     int front,rear;//定义队头
 6     front = rear = -1;//置队列为空队列
 7     rear++;
 8     que[rear] = root;//根节点指针进队
 9     while(front!=rear){//队列不为空
10         front =(front + 1) % fb;
11         p = que[front];//队头出队列
12         cout<<p->NodeNum<<" ";//输出节点数据
13         if(p->left!=NULL){//有左孩子时进队
14             rear = (rear + 1) % fb;
15             que[rear] = p->left;
16         }
17         if(p->right != NULL){//有右孩子时进队
18             rear = (rear + 1) % fb;
19             que[rear] = p->right;
20         }
21     }
22 }

 

 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/ohxiaobai/p/4072360.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值