实验四
• 遍历二叉树。
• 请输入一棵二叉树的扩展的前序序列,经过处理后生成一棵二叉树,然后对于该二叉树输出前序、中序和后序遍历序列。
• 测试:
• 输入:ABCDE*GF***
实现代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct TreeNode//二叉树链表
{
char data;
struct TreeNode *lchild,*rchild;//建立左指针和右指针
}node,*tree;
int createtree(tree &T)//以先序次序创建二叉树
{
char ch;
scanf("%c",&ch);
if(ch=='*')
{
T=NULL;
}
else
{
T=(node*)malloc(sizeof(node));
T->data=ch;
createtree(T->lchild);
createtree(T->rchild);
}
return 1;
}
int visit(char c)//输出
{
printf("%c",c);
return 1;
}
int pre(tree T,int (*visit)(char c))//先序遍历
{
if(T)
{
if(visit(T->data))
if(pre(T->lchild,visit))
if(pre(T->rchild,visit))return 1;
return 0;
}
else
return 1;
}
int mid(tree T,int (*visit)(char c))//中序遍历
{
if(T)
{
if(mid(T->lchild,visit))
if(visit(T->data))
if(mid(T->rchild,visit))
return 1;
return 0;
}
else
return 1;
}
int epi(tree T,int (*visit)(char c))//后序遍历
{
if(T)
{
if(epi(T->lchild,visit))
if(epi(T->rchild,visit))
if(visit(T->data)) return 1;
return 0;
}
else
return 1;
}
int main()
{
tree T;
createtree(T);
printf("先序:");
pre(T,visit);//前序遍历
printf("\n");
printf("中序:");
mid(T,visit);//中序遍历
printf("\n");
printf("后序:");
epi(T,visit);//后序遍历
printf("\n");
}