用递归方法实现二叉树的中序遍历和后序遍历算法
//用递归方法实现二叉树的中序遍历和后序遍历算法;
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char TElemType;
typedef int Status;
typedef struct BiTNode { // 结点结构
TElemType data;
struct BiTNode *lchild, *rchild; // 左右孩子指针
} BiTNode, *BiTree;
//以下是建立二叉树存储结构
Status CreateBiTree(BiTree &T) {
char ch;
scanf("%c",&ch);
if (ch=='#') T = NULL;
else {
if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data = ch; // 生成根结点
CreateBiTree(T->lchild); // 构造左子树
CreateBiTree(T->rchild); // 构造右子树
}
return OK;
} // CreateBiTree
void InOrder (BiTree T)
{ // 中序遍历二叉树
if (T) {
InOrder(T->lchild);//遍历左孩子
printf("%c",T->data);
InOrder(T->rchild);//遍历右孩子
//请在此填写代码,将该算法补充完整,参见书本和课件相关章节
}
}
void PostOrder (BiTree T)
{ // 后序遍历二叉树
InOrder(T->lchild);//遍历左孩子
InOrder(T->rchild);//遍历右孩子
printf("%c",T->data);
//请在此填写代码,将该算法补充完整,参见书本和课件相关章节
}
int main()
{
BiTree T;
int s=0,m=0,n=0,d=0;
T=NULL;
printf("\n 请按先序次序输入各结点的值,以#表示空树:\n");
CreateBiTree(T);
printf("二叉树已建立完毕!\n");
printf("\n 中序遍历:");
InOrder(T);
printf("\n 后序遍历:");
PostOrder(T);
return 0;
}