ds.h
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
BiTree.h
#include"ds.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode,*BiTree;
BiTree CreateBiTree(BiTree &T);
void preorder(BiTree &T);
void inorder(BiTree &T);
void postorder(BiTree &T);
BiTree.cpp
#include"BiTree.h"
BiTree CreateBiTree(BiTree &T) { // 算法6.4
// 按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,
// 构造二叉链表表示的二叉树T。
char ch;
cin>>ch;
if (ch=='#') T = NULL;
else {
if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
T->data = ch; // 生成根结点
CreateBiTree(T->lchild); // 构造左子树
CreateBiTree(T->rchild); // 构造右子树
}
return T;
}
void preorder(BiTree &T) //先序遍历
{
if (T!=NULL)
{
cout<<T->data;
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BiTree &T) //中序遍历
{
if (T!=NULL)
{
inorder(T->lchild);
cout<<T->data;
inorder(T->rchild);
}
}
void postorder(BiTree &T) //后序遍历
{
if (T!=NULL)
{
postorder(T->lchild);
postorder(T->rchild);
cout<<T->data;
}
}
main.cpp
#include"BiTree.h"
void main()
{
BiTree T;
CreateBiTree(T);
preorder(T);
cout<<endl;
inorder(T);
cout<<endl;
postorder(T);
cout<<endl;
}