编写程序实现二叉树的下列基本操作:
(1) 根据教材126页的算法5.3,建立一颗“二叉树”。
(2) 分别编写算法完成先序、中序、后序遍历二叉树,输出遍历序列。。
(3) 使用队列完成层序遍历二叉树算法,输出遍历序列。。
(4)销毁二叉树。
代码如下:
#include<stdio.h>
#include<iostream>
#include<windows.h>
#include<malloc.h>
#include<conio.h>
#include<queue>
#include<string>
using namespace std;
#define OK 1
#define ERROR 0
typedef char elemtype;
typedef struct bitnode
{
elemtype data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
void createbitree(bitree &t)
{ char ch;
cin>>ch;
if(ch=='#')
{
t=NULL;
}
else{
t=new bitnode;
t->data=ch;
createbitree(t->lchild);
createbitree(t->rchild);
}
}
void preordertraverse(bitree t)
{
if(t)
{
cout<<t->data;
preordertraverse(t->lchild);
preordertraverse(t->rchild);
}
}
void inordertraverse(bitree t)
{
if(t)
{
inordertraverse(t->lchild);
cout<<t->data;
inordertraverse(t->rchild);
}
}
void postordertraverse(bitree t)
{
if(t)
{
postordertraverse(t->lchild);
postordertraverse(t->rchild);
cout<<t->data;
}
}
void levelordertraverse(bitree t)
{
queue<bitnode *>q;
if(t)
{
q.push(t);
}
while (!q.empty())
{
bitree front;
front= q.front();
q.pop();
if (front->lchild)
{ q.push(front->lchild);}
if (front->rchild)
{ q.push(front->rchild);}
cout<<front->data;
}
}
void destroytree(bitree &t)
{
if (t)
{
if (t->lchild)
{
destroytree(t->lchild);
}
else if (t->rchild)
{
destroytree(t->rchild);
}
free(t);
t=NULL;
}
}
int main()
{
bitree t;
cout<<"先序创建二叉树,请输入结点('#'表示节点为空):\n";
createbitree(t);
cout<<"二叉树创建完成!";
cout<<"\n前序遍历:";
preordertraverse(t);
cout<<"\n中序遍历:";
inordertraverse(t);
cout<<"\n后序遍历:";
postordertraverse(t);
cout<<"\n层序遍历:";
levelordertraverse(t);
cout<<"\n完成!按任意键销毁二叉树并退出!";
getch();
destroytree(t);
}