在前面介绍了二叉树的层次遍历,是用非递归算法实现的。
本文,我们基于递归算法实现。
#include<queue>
#include<iostream>
using namespace std;
struct node
{//树的结点结构。二叉链表表示法
char data;
node *lchild,*rchild;
};
void layerTraverseRecurve(queue<node*> &q)
{//递归部分
if(q.empty()==false)//当队列不空时,重复
{
node *t;
t=q.front();
q.pop();
if(t->lchild)
{//若左孩子存在
cout<<t->lchild->data<<" ";
q.push(t->lchild);
}
if(t->rchild)
{//若右孩子存在
cout<<t->rchild->data<<" ";
q.push(t->rchild);
}
layerTraverseRecurve(q);
}
}
void layerTraverse2(node *root)
{//层序遍历以root为根的二叉树,基于递归实现
queue<node*> q;
cout<<root->data<<" ";//访问根
q.push(root);//根入队列
layerTraverseRecurve(q);
}
int main( )
{
node a,b,c,d,e;//定义5个结点作为二叉树的结点
//为每个结点赋值
a.data='a';a.lchild=a.rchild=0;
b.data='b';b.lchild=b.rchild=0;
c.data='c';c.lchild=c.rchild=0;
d.data='d';d.lchild=d.rchild=0;
e.data='e';e.lchild=e.rchild=0;
//将各个结点连接成树
a.lchild=&b;a.rchild=&c;
c.lchild=&d;c.rchild=&e;
//层序遍历
layerTraverse2(&a);
cout<<endl;
return 0;
}