1二叉树中存储的数据范围仅限于26个英文字母
2程序要提示用户从键盘分别输入二叉树的先序和中序序列,接受输入后,调用相应的函数完成二叉树的创建
3成功创建二叉树后,程序自动输出该二叉树的后序遍历次序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define size 100
typedef struct JD
{
char data;
struct JD *lchild,*rchild;
}BiTree;
int Search(char ino[],char ch)
{
int i=0;
//puts(ino)
while(ino[i]!=ch&&ino[i])
i++;
if(ino[i]==ch)
return i;
else
return -1;
}
void CrtBT(BiTree *T, char pre[], char ino[], int ps, int is, int n ) /*已知pre[ps..ps+n-1]为二叉树的先序序列,ino[is..is+n-1]为二叉树的中序序列,本算法由此两个序列构造二叉链表*/
{
int k;
if (n==0) T=NULL;
else
{
k=Search(ino, pre[ps]);/*在中序序列中查询*/
if (k== -1) {T=NULL;puts("错误!!!\n");}
else
{
T= (BiTree*)malloc(sizeof(BiTree));
if (T==NULL) exit(1);
T->data = pre[ps];
if (k==is) T->lchild = NULL;
else
CrtBT(T->lchild ,pre ,ino ,ps+1 ,is ,k-is );
if (k=is+n-1) T->rchild = NULL;
else
CrtBT(T->rchild, pre, ino, ps+1+(k-is), k+1, n-(k-is)-1 );
}
}
} /* end CrtBT */
void postorder(BiTree *t)//递归先序遍历
{
if(t!=NULL)
{ printf("%c\t",t->data);
postorder(t->lchild);
postorder(t->rchild);
}
}
void main()
{
char pre[size],ino[size];
int ps,is,n;
BiTree *T=NULL;
puts("enter:");
scanf("%s",pre);
scanf("%s",ino);
CrtBT(T,pre,ino,0,0,strlen(pre));
postorder(T);
getchar();
}
修改
或者新程序都可以
繁花如伊
回首忆惘然