引例 我们可以简单分析一下如何通过先序序列和中序序列建立二叉树
已知中序序列和先序序列 我们如何设计算法 树的算法基本离不开递归 整棵树可分为左子树 根 右子树 左右子树同样可以分为如上结构 我们只需要改变调用函数时传入的参数 参数分析如图
Void Crtbt(T,pre[],ino[],ps,is,n){
/*根据先序和中序序列建立二叉树递归算法
传入参数为:根节点 先序序列 中序序列 先序序列第一个结点
中序序列第一个结点 二叉树节点个数 */
if(n==0)
T==NULL;//空树
else{
k=search(ino,pre[ps]);//查找根结点在中序序列的位置
if(k==-1)
T==NULL;//根节点不存在 序列错误
else{
T=(Bitnode*)malloc(sizeof(Bitnode));//申请内存给根结点
T->date=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);
//传入右子树相关参数
}
}
}
这样算法就设计好啦~