递归实现二叉树的建树和遍历
#include <iostream>
#include <algorithm>
#include <malloc.h>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define MAXSIZE 100
typedef int Status;
typedef int Elemetype;
typedef struct BiNode
{
Elemetype data;
struct BiNode * lChild, *rChild;
}BiNode ,* BiTree;
Status TreeCreated=FALSE;
Status CreateBiTree(BiTree *T);
Status PreOrderPraverse(BiTree T);
Status InOrderTraverse(BiTree T);
Status PostOrderTraverse(BiTree T);
int main()
{
BiTree *ss;
BiNode * * aa;
ss=aa;
int choice=0,leave=10;
Status c=FALSE,flag;
BiNode * BT;
cout<<"=============)二叉树演示程序=============="<<endl;
while(1)
{
cout<<"1.创建,先序输入,0为空节点"<<endl;
cout<<"2.先序遍历,"<<endl;
cout<<"3.中序遍历"<<endl;
cout<<"4.后续遍历"<<endl;
cout<<"0.退出"<<endl;
cout<<"--------输入你的选择:"<<endl;
cin>>choice;
switch(choice)
{
case 1:
if(TreeCreated)
{
cout<<"树已经被创建"<<endl;
break;
}
cout<<"请输入二叉树的数据:"<<endl;
flag=CreateBiTree(& BT);
if(flag)
{
cout<<"建立成功"<<endl;
TreeCreated=TRUE;
}
break;
case 2:
if(!TreeCreated)
{
cout<<"树还没有建立"<<endl;
break;
}
else
{
PreOrderPraverse(BT);
cout<<endl;
}
break;
case 3:
if(!TreeCreated)
{
cout<<"树还没有建立"<<endl;
break;
}
else
{
PreOrderPraverse(BT);
cout<<endl;
}
break;
case 4:
if(!TreeCreated)
{
cout<<"树还没有建立"<<endl;
break;
}
else
{
PreOrderPraverse(BT);
cout<<endl;
}
break;
}
}
return 0;
}
Status CreateBiTree(BiTree * T) //建树
{
int ch=0;
cin>>ch;
if(ch==0)
{
(*T)=NULL;
}
else
{
(* T)=(BiTree) malloc(sizeof(BiNode));
(* T)->data=ch;
CreateBiTree(&(*T)->lChild);
CreateBiTree(&(*T)->rChild);
}
return OK;
}
Status PreOrderPraverse(BiTree T)//先序
{
if(T)
{
cout<<T->data<<" ";
PreOrderPraverse(T->lChild);
PreOrderPraverse(T->rChild);
return OK;
}
else
return FALSE;
}
Status InOrderPraverse(BiTree T)//中序
{
if(T)
{
InOrderPraverse(T->lChild);
cout<<T->data<<" ";
InOrderPraverse(T->rChild);
return OK;
}
else
return FALSE;
}
Status PostOrderPraverse(BiTree T)//后序
{
if(T)
{
InOrderPraverse(T->lChild);
InOrderPraverse(T->rChild);
cout<<T->data<<" ";
return OK;
}
else
return FALSE;
}