这题要用队列去做,从根开始,往下层从左到右输出数据即可。
注意头文件加了一个queue 。
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<queue>
using namespace std;
typedef char TElemType;
//二叉树的二叉链表存储表示
typedef struct BiTNode
{
TElemType data; //结点数据域
struct BiTNode *lchild, *rchild; //左右孩子指针
} BiTNode, *BiTree;
//先序建立二叉树
void CreateBiTree(BiTree &T)
{
TElemType ch;
if(!(cin >> ch)) exit(0);
if(ch=='#')T=NULL;
else
{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
//层次遍历
void InOrderTraverse(BiTree T)
{
queue<BiTree>a;//建立队列
if(!T)return;
else
{
a.push(T);//把第一个数据压入队列
while(!a.empty())
{
cout<<" "<<a.front()->data;//读出队首
T=a.front();//T要变为队首的值
a.pop();//队首输出过了,出队列
if(T->lchild)a.push(T->lchild);//左子树有值,压入队列
if(T->rchild)a.push(T->rchild);//右子树有值,压入队列
}
}
}
//销毁树
void DestroyBitree(BiTree& T)
{
if(!T)return ;
else
{
if(T->lchild)DestroyBitree(T->lchild);
if(T->rchild)DestroyBitree(T->rchild);
delete T;
T=NULL;
}
}
int main()
{
BiTree tree;
while(1)
{
CreateBiTree(tree);
InOrderTraverse(tree);
cout << endl;
DestroyBitree(tree);
}
}