【问题描述】按先序次序建立一棵二叉树(二叉链表),然后分行依次输出它的先序、中序、后序序列(要求使用递归调用)。
【样例输入】ABF##C##JM###
【样例输出】ABFCJM
FBCAMJ
FCBMJA
【样例说明】输入#代表此处结点空缺,换行依次输出它的先序、中序、后序序列
【运行结果如下】
【代码如下】
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -1
typedef char TElemType;
typedef void Status;
/*二叉树的二叉链表存储表示*/
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild, *rchild; //左右孩子指针
}BiTNode, *BiTree;
Status CreateBiTree(BiTree &T)
{
/*构造二叉树*/
TElemType ch;
scanf("%c",&ch);
if(ch == '#') T = NULL;
else
{
//T = (BiTNode*)malloc(sizeof(BiTNode));
T = new BiTNode;
if (!T) exit(OVERFLOW); //创建结点失败
T->data = ch; //生成根结点
CreateBiTree(T->lchild); //构造左子树
CreateBiTree(T->rchild); //构造右子树
}
}
Status PreTraverse(BiTree &T)
{
/*先序遍历*/
if (!T) return; //空树,终止递归
printf("%c",T->data);
PreTraverse(T->lchild); //遍历左子树
PreTraverse(T->rchild); //遍历右子树
}
Status InTraverse(BiTree &T)
{
/*中序遍历*/
if (!T) return;
InTraverse(T->lchild);
printf("%c",T->data);
InTraverse(T->rchild);
}
Status PostTraverse(BiTree &T)
{
/*后序遍历*/
if (!T) return;
PostTraverse(T->lchild);
PostTraverse(T->rchild);
printf("%c",T->data);
}
int main()
{
BiTree T;
CreateBiTree(T);
PreTraverse(T); //先序遍历
printf("\n");
InTraverse(T); //中序遍历
printf("\n");
PostTraverse(T); //后序遍历
return 0;
}
本文章仅供学习和参考!
欢迎交流~