二叉树的层序遍历

此前写过一篇二叉树的基础创建与各种遍历(先,中,后),然而我们经常用到二叉树的层序遍历,即从左至右一层一层的输出节点。

算法思路:将根节点放入一队列中,输出根节点,然后判断根节点是否有左右孩子,有则继续放入队列,依次输出队列的元素。

我们引用上次的代码,改一下遍历的函数。

#include<iostream>
#include<queue>
#define Max 50
using namespace std;
//先序和中序建树
typedef struct Tree *BinTree;
struct Tree{
int data;
BinTree lchild;
BinTree rchild;
};
BinTree Create(int pre[],int in[],int len){
BinTree t;
int i = 0;
if(!len)
return NULL;
else{
t = (BinTree)malloc(sizeof(struct Tree));
t->data = pre[0];
for(i;i<len;i++){
if(in[i] == pre[0])
break;
}
t->lchild = Create(pre+1,in,i);
t->rchild = Create(pre+i+1,in+i+1,len-i-1);
}
return t;
}
//层序遍历二叉树
void outOfLevel(BinTree T){
queue<BinTree> rel;
rel.push(T);
while(!rel.empty()){
BinTree front = rel.front();//取出第一个元素
rel.pop();//释放第一个元素
cout<<front->data<<' ';
if(front->lchild!=NULL)
rel.push(front->lchild);
if(front->rchild!=NULL)
rel.push(front->rchild);
}
}
int main(){
int n;//节点数
BinTree T;
int pre[Max],in[Max];//先序和中序的序列
cin>>n;
for(int i = 0;i<n;i++)
cin>>pre[i];
for(int j = 0;j<n;j++)
cin>>in[j];
T = Create(pre,in,n);
outOfLevel(T);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值