首先代码(该代码仅有层次遍历教学作用)
#include<iostream>
#include<queue>
using namespace std;
struct tree{
struct tree* LHand;
struct tree* RHand;
int data;
};
void point(tree *t){
queue <tree*> p;
if(t!=NULL){
p.push(t);
}
while(p.empty()==false){
t=p.front();
p.pop();
cout<<t->data<<"\t";
if(t->LHand!=NULL){
p.push(t->LHand);
}
if(t->RHand!=NULL){
p.push(t->RHand);
}
}
}
int main(){
tree a[9];
for(int i=1;i<10;i++){
a[i-1].data=i;
a[i-1].LHand=NULL;
a[i-1].RHand=NULL;
}
a[0].LHand=&a[1];
a[0].RHand=&a[2];
a[1].LHand=&a[3];
a[1].RHand=&a[4];
a[2].LHand=&a[5];
a[2].RHand=&a[6];
a[3].LHand=&a[7];
a[5].RHand=&a[8];
point(a);
return 0;}
在二叉树的层次遍历中,我们需要用到对列,队列先进先出,进的是对尾,出的是队首,在这里我们首先构造一个二叉树如下
上图的树,在层次输出函数point中,首先我们创建一个树指针类型的队列,然后首先将树的根指针放进队列去,这时队列只有一个数据,队尾队首均是此数据,第一次while循环,此时参数t指针指向的是树的根,输出t->data,然后将队首元素删除,队列变空,判断t指向的二叉树是否有左孩子,有的话将指向左孩子的指针填入到队列中去,然后右孩子…当进行第二次while循环时,参数t指向下一个队首,输出t->data,即根的左孩子,然后将队首元素删除,此时下一个队首是根的右孩子,队列不再变空,将左孩子的左孩子和左孩子的右孩子添到队列里,第三次while循环,参数t指向下一个队首,输出t->data,即根的右孩子,t指向根的右孩子,将右孩子的左孩子和右孩子的右孩子添到队列中去,然后依次类推就达到了如图的效果
由此达到了每层每层输出的效果
版权声明:本文为m2027295270原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。