二叉树层次遍历,超好理解(简单版)

首先代码(该代码仅有层次遍历教学作用)

#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版权协议,转载请附上原文出处链接和本声明。