您的位置:首页 > 其它

二叉树的创建与遍历

2012-05-07 21:08 155 查看
用二叉链表存储二叉树,利用二叉树先序遍历结果递归的方法创建二叉树,对二叉树进行先序遍历,中序遍历,后序遍历。序列:1 2 0 4 0 0 3 5 0 0 0
#include<iostream>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define ok 1
#define maxsize 100
using namespace std;
//typedef int status;
//typedef int elemtype;
typedef struct binode
{
int data;
struct binode *lchild,*rchild;
}binode,*bitree;
int treecreated=FALSE;
int creatbitree(bitree *T);
int preordertraverse(bitree T);
int inordertraverse(bitree T);
int postordertraverse(bitree T);
void main()
{
int choice=0;
int leave=FALSE,flag;
binode *BT;
cout<<"================)二叉树演示程序=============="<<endl;
do
{
cout<<"1.创建一个二叉树,按线序遍历结果输入,空用0表示"<<endl;
cout<<"2.先序遍历二叉树,递归方式遍历二叉树"<<endl;
cout<<"3.中序遍历二叉树,递归方式遍历二叉树"<<endl;
cout<<"4.后序遍历二叉树,递归方式遍历二叉树"<<endl;
cout<<"0.quit"<<endl;
cout<<"----input your selection:"<<endl;
cin>>choice;
switch(choice)
{
case 1:
if(treecreated)
{
cout<<"sorry,the tree has been already created!"<<endl;
break;
}
cout<<"please put in number!"<<endl;
flag=creatbitree(&BT);
if(flag=ok)
{
cout<<"ok,now a tree named BT is created.."<<endl;
treecreated=TRUE;
}
break;
case 2:
if(!treecreated)
{
cout<<"sorry,you need creat a tree for futher steps!"<<endl;
break;
}
cout<<"pre order";
preordertraverse(BT);
cout<<endl;
break;
case 3:
if(!treecreated)
{
cout<<"sorry,you need creat a tree for futher steps!"<<endl;
break;
}
cout<<"int order";
inordertraverse(BT);
cout<<endl;
break;
case 4:
if(!treecreated)
{
cout<<"sorry,you need creat a tree for futher steps!"<<endl;
break;
}
cout<<"post order";
postordertraverse(BT);
cout<<endl;
break;
case 0:
leave=TRUE;
break;
}
}while(!leave);
cout<<"thanks for using ,bye~"<<endl;
}
int creatbitree(bitree *T) //递归方法实现创建二叉树
{
int ch=0;
cin>>ch;
if(ch==0)
(*T)=NULL;
else
{
(*T)=(bitree)malloc(sizeof(binode));
(*T)->data=ch;
creatbitree(&(*T)->lchild);
creatbitree(&(*T)->rchild);
}
return ok;
}int preordertraverse(bitree T) //递归方法实现遍历
{
if(T)
{
cout<<T->data<<" ";
preordertraverse(T->lchild);
preordertraverse(T->rchild);
return ok;
}
else
return FALSE;
}int inordertraverse(bitree T) //递归实现中序遍历
{
if(T!=NULL)
{
inordertraverse(T->lchild);
cout<<T->data<<" ";
inordertraverse(T->rchild);
return ok;
}
else
return FALSE;
}int postordertraverse(bitree T)
{
if(T)
{
postordertraverse(T->lchild);
postordertraverse(T->rchild);
cout<<T->data<<" ";
return ok;
}
else
return FALSE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: