#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FLASE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
/* 定义DataType为char类型 */
typedef char DataType;
typedef char TElemType;
/* 二叉树的结点类型 */
typedef struct BitNode
{
DataType data;
struct BitNode *lchild,*rchild;
}*BitTree;
/* 初始化二叉树,即把树根指针置空 */
void BitTreeInit(BitTree &BT)
{
BT=NULL;
printf("OK\n");
}
/* 按先序次序建立一个二叉树*/
void BitTreeCreate(BitTree &BT)
{
char ch;
cin>>ch;
if (ch=='/') BT=NULL;
else {
if(!(BT=(BitNode*)malloc(sizeof(BitNode)))) exit(OVERFLOW);
BT->data=ch; /*生成根结点*/
BitTreeCreate(BT->lchild); /*构造左子树*/
BitTreeCreate(BT->rchild); /*构造右子树*/
}
// return 1;
} //BitTreeCreate
/* 检查二叉树是否为空 */
int BitTreeEmpty(BitTree &BT)
{
if(BT=NULL)
return 0;
else
return 1;
printf(" \n");
}
/* 按先序输出二叉树中的所有结点 */
void preorder(BitTree BT)//递归
{
if(BT!=NULL)
{
cout<<BT->data;
preorder(BT->lchild);
preorder(BT->rchild);
}
}
/* 按中序输出二叉树中的所有结点 */
void inorder(BitTree BT)//递归
{
if(BT!=NULL)
{
preorder(BT->lchild);
cout<<BT->data;
preorder(BT->rchild);
}
}
/* 按后序输出二叉树中的所有结点 */
void lastorder(BitTree BT)//递归
{
if(BT!=NULL)
{
preorder(BT->lchild);
preorder(BT->rchild);
cout<<BT->data;
}
}
void caidan()
{
printf("*************************************************************\n");
printf(" 1.初始化二叉树\n");
printf(" 2.按先序次序建立一个二叉树\n");
printf(" 3.检查二叉树是否为空(为空返回0,否则返回1)\n");
printf(" 4.按先序、中序、后序输出二叉树中的所有结点\n");
printf(" 5.退出\n");
printf("*************************************************************\n");
printf("请选择:\n");
}
int main()
{
BitTree BT;
int m;
int k;
for(;;)
{
caidan();
scanf("%d",&k);
switch(k)
{
case 1: BitTreeInit(BT);break;
case 2:printf("请按先序次序建立一个二叉树:\n");
BitTreeCreate(BT); break;
case 3: m=BitTreeEmpty(BT);
printf("%d\n",m);break;
case 4:printf("按先序,中序,后序遍历")
preorder(T);printf("遍历成功\n");
inorder(T); printf("遍历成功\n");
lastorder(T); printf("遍历成功\n"); break;
case 5: exit(-1);
default: printf("错误\n");break;
}
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FLASE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
/* 定义DataType为char类型 */
typedef char DataType;
typedef char TElemType;
/* 二叉树的结点类型 */
typedef struct BitNode
{
DataType data;
struct BitNode *lchild,*rchild;
}*BitTree;
/* 初始化二叉树,即把树根指针置空 */
void BitTreeInit(BitTree &BT)
{
BT=NULL;
printf("OK\n");
}
/* 按先序次序建立一个二叉树*/
void BitTreeCreate(BitTree &BT)
{
char ch;
cin>>ch;
if (ch=='/') BT=NULL;
else {
if(!(BT=(BitNode*)malloc(sizeof(BitNode)))) exit(OVERFLOW);
BT->data=ch; /*生成根结点*/
BitTreeCreate(BT->lchild); /*构造左子树*/
BitTreeCreate(BT->rchild); /*构造右子树*/
}
// return 1;
} //BitTreeCreate
/* 检查二叉树是否为空 */
int BitTreeEmpty(BitTree &BT)
{
if(BT=NULL)
return 0;
else
return 1;
printf(" \n");
}
/* 按先序输出二叉树中的所有结点 */
void preorder(BitTree BT)//递归
{
if(BT!=NULL)
{
cout<<BT->data;
preorder(BT->lchild);
preorder(BT->rchild);
}
}
/* 按中序输出二叉树中的所有结点 */
void inorder(BitTree BT)//递归
{
if(BT!=NULL)
{
preorder(BT->lchild);
cout<<BT->data;
preorder(BT->rchild);
}
}
/* 按后序输出二叉树中的所有结点 */
void lastorder(BitTree BT)//递归
{
if(BT!=NULL)
{
preorder(BT->lchild);
preorder(BT->rchild);
cout<<BT->data;
}
}
void caidan()
{
printf("*************************************************************\n");
printf(" 1.初始化二叉树\n");
printf(" 2.按先序次序建立一个二叉树\n");
printf(" 3.检查二叉树是否为空(为空返回0,否则返回1)\n");
printf(" 4.按先序、中序、后序输出二叉树中的所有结点\n");
printf(" 5.退出\n");
printf("*************************************************************\n");
printf("请选择:\n");
}
int main()
{
BitTree BT;
int m;
int k;
for(;;)
{
caidan();
scanf("%d",&k);
switch(k)
{
case 1: BitTreeInit(BT);break;
case 2:printf("请按先序次序建立一个二叉树:\n");
BitTreeCreate(BT); break;
case 3: m=BitTreeEmpty(BT);
printf("%d\n",m);break;
case 4:printf("按先序,中序,后序遍历")
preorder(T);printf("遍历成功\n");
inorder(T); printf("遍历成功\n");
lastorder(T); printf("遍历成功\n"); break;
case 5: exit(-1);
default: printf("错误\n");break;
}
}
return 0;
}