6.65④ 已知一棵二叉树的前序序列和中序序列分别
存于两个一维数组中,试编写算法建立该二叉树的二
叉链表。
要求实现以下函数:
void BuildBiTree(BiTree &bt, int ps, char *pre,
int is, char *ino, int n);
/* 当前要建立的子树bt的元素总数为n,*/
/* 元素在前序序列pre的起始位置为ps,*/
/* 元素在中序序列ino的起始位置为is */
二叉链表类型定义:
typedef char TElemType;
typedef struct BiTNode {
TElemType data;
BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
存于两个一维数组中,试编写算法建立该二叉树的二
叉链表。
要求实现以下函数:
void BuildBiTree(BiTree &bt, int ps, char *pre,
int is, char *ino, int n);
/* 当前要建立的子树bt的元素总数为n,*/
/* 元素在前序序列pre的起始位置为ps,*/
/* 元素在中序序列ino的起始位置为is */
二叉链表类型定义:
typedef char TElemType;
typedef struct BiTNode {
TElemType data;
BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void BuildBiTree(BiTree &bt, int ps, char *pre,int is, char *ino, int n)
{
int i;
BiTree lbt,rbt;
if(n){
bt=(BiTree)malloc(sizeof(BiTNode));
bt->data=pre[ps];
for(i=0;i<n;i++)
{
if(pre[ps]==ino[is+i])
break;
}
BuildBiTree(lbt,ps+1,pre,is,ino,i);
bt->lchild=lbt;
BuildBiTree(rbt,ps+1+i,pre,is+i+1,ino,n-1-i);
bt->rchild=rbt;
}else{
bt=NULL;
}
}