由二叉树的前序遍历和中序遍历序列能确定唯一的一棵二叉树,下面程序的作用是实现由已知某二叉树的前序遍历和中序遍历序列,生成一棵用二叉链表表示的二叉树并打印出后序遍历序列,请写出程序所
缺的语句。
#define MAX 100
typedef struct Node{
char info;
struct Node *llink, *
rlink;
}TNODE;
char pred[MAX],inod[MAX];
//前序遍历序列数组,和中序遍历数组
main(int argc,
int **argv){
//argc是个啥我也不知道,argv是个二维数组。
TNODE *root;
//建立根结点
if(argc<
3) exit
0;
strcpy(pred,argv[1]);
//复制给pred
strcpy(inod,argv[
2]);
//复制给inod
root=restore(pred,inod,strlen(pred));
//建树
postorder(root);
//后序遍历
}
TNODE *restore(
char *ppos,
char *ipos,
int n){
//oppos 是先序遍历数组,ipos是中序遍历数组
TNODE *ptrl;
//新建一棵树
char *
rpos;
int k;
if(n<=
0)
return NULL;
//n是还有多少没有结点没有进到树内
ptr->info = *ppos;
//根节点的值为先序的第一个。这里不能写ppos[0],因为这个是个递归,
for(rpos = ipos; rpos<ipos+n;rpos++
)
if(*rpos==*ppos)
break;
//从中序中找到前序的第一个。
k = rpos - ipos;
//地址直接减,就是他的位子。
ptr->llink = restore(ppos+
1, ipos,k );
//ppos的第一个是跟。ppos+1开始的k个和ipos开始的k个构成做左子树
ptr->rlink = restore(ppos+
1+k,rpos+
1,n-
1-k);
//ppos+1开始的k个画也就是ppos+1+K,rpos+1(也可以ipos+k+1)就是k和左子树和一个根,后面的是右子树。个数是n-1-k;
return ptr;
}
postorder(TNODE*
ptr){
if(ptr=NULL)
return;
postorder(ptr->
llink);
postorder(ptr->
rlink);
printf(“%c”,ptr->
info);
}
转载于:https://www.cnblogs.com/2014slx/p/11335739.html