由前序序列和中序遍历序列
前序序列用于确定“根节点”,中序遍历序列确定“左右节点”,第一个元素时根节点
所有的递归语句执行顺序都与二叉树同构,所以确定的顺序为A,B,C,D,E,F
/*由中序遍历 先序遍历 递归创建二叉树*/
void PreInOrd(char preord[], char inord[], int i, int j, int k, int h, BiTree &T)
//先序序列:i(0)->j(strlen-1),中序序列k(0)->h(strlen-1),建立二叉树t
{ int m;
T = new BiTNode;// 新的节点也是新的树
T->data = preord[i];//根节点赋值
m = k;//m相当于一个位置指针,指向根节点在中序中的位置,其左为左子树,右为右子树
while (inord[m] != preord[i])
{ m++;
}
if (m == k)//左子树空
{T->lc = NULL;}
else
{PreInOrd(preord, inord, i + 1, i + m - k, k, m - 1, T->lc);}
//m - k是左边元素的个数
if (m == h)//右子树空
{
T->rc = NULL;
}
else
{
PreInOrd(preord, inord, i + m - k + 1, j, m + 1, h,T->rc);
}
}
由后序序列和中序遍历序列
后序序列用于确定“根节点”,中序遍历序列确定“左右节点”,最后一个元素时根节点