/*
二叉树的层次遍历结果:递归和非递归
内容源自网络,部分代码修改
*/
#include <iostream>
#include <cstdlib>
#include <queue>
using namespace std;
typedef char ElemType;
typedef struct BitNode{
ElemType data;
struct BitNode *lchild, *rchild;
}*BiTree;
//创建二叉树
void CreateTree(BiTree &t){
char c;
cin >> c;
if(c=='#')
t = NULL;
else{
t = (BiTree)malloc(sizeof(BitNode));
t->data = c;
CreateTree(t->lchild);
CreateTree(t->rchild);
}
}
//递归层次遍历
void LevelOrder1(BiTree T)
{
int curSize; //记录每一层的结点数
if(T == NULL) return;
queue<BiTree> q;
q.push(T);
while (!q.empty())
{
curSize = q.size();
while(curSize--){
BiTree p = q.front();
q.pop();
cout << p->data << " ";
if(p->lchild)
q.push(p->lchild);
if(p->rchild)
q.push(p->rchild);
}
cout << endl;
}
}
//非递归层次遍历
void LevelOrder2(BiTree T)
{
if(T == NULL) return;
queue<BiTree> q;
q.push(T);
int curLevelNum; // 当前层的节点数
while (q.size())
{
curLevelNum = q.size();
while(curLevelNum-- > 0) // 一直访问到当前层的最后一个节点
{
BiTree tmp = q.front();
q.pop();
cout << tmp->data << " ";
if(tmp->lchild)
q.push(tmp->lchild);
if(tmp->rchild)
q.push(tmp->rchild);
}
putchar('\n'); // 当前层的元素输出完毕后,换行
}
}
int main(){
BiTree t;
cout << "输入树的结点(先序,#代表空树):";
CreateTree(t);
cout << "二叉树的层次遍历结果:" << endl;
LevelOrder1(t);
return 0;
}
程序小白,如果代码中有任何的问题,欢迎指出。