问题:利用二叉链表建立一棵二叉树,分别采用先序、中序和后序遍历该二叉树,并输出遍历的序列。
考察二叉树的结构特征,以及链式存储结构的特点及程序设计方法
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct BiTNode
{ //定义二叉树
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T)
{
char data;
//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树
scanf("%c",&data);
if(data == '#')
{
*T = NULL;
}
else{
*T =(BiTree)malloc(sizeof(BiTNode));
(*T)->data = data; //生成根结点
CreateBiTree(&(*T)->lchild); //构造左子树
CreateBiTree(&(*T)->rchild); //构造右子树
}
}
void Visit(BiTree T)
{ //输出
if(T->data != '#'){
printf("%c",T->data);
}
}
void PreOrder(BiTree T)
{ //先序遍历
if(T != NULL)
{
Visit(T); //访问根节点
PreOrder(T->lchild); //访问左子结点
PreOrder(T->rchild); //访问右子结点
}
}
void InOrder(BiTree T)
{ //中序遍历
if(T != NULL){
InOrder(T->lchild); //访问左子结点
Visit(T); //访问根节点
InOrder(T->rchild); //访问右子结点
}
}
void PostOrder(BiTree T)
{ //后序遍历
if(T != NULL)
{
PostOrder(T->lchild); //访问左子结点
PostOrder(T->rchild); //访问右子结点
Visit(T); //访问根节点
}
}
int main()
{
BiTree T;
printf("Please input binary tree:");
CreateBiTree(&T);
printf("\npreodertraversal:");
PreOrder(T);
printf("\ninoder traversal:");
InOrder(T);
printf("\nPostordertraversal:");
PostOrder(T);
return 0;
}