算法思路:先序序列或者后序序列都可以找到根节点,中序可以将序列划分成左子树+根+右子树的形式,由此进行递归操作即可构建二叉树。
以先序和中序为例
C++代码实现:
//利用前序+中序序列建立二叉树
bitree hikaka_tree::pre_mid_create(char *pre,char *mid,int n)
{
if(n==0)
return nullptr;
char ch=pre[0];
int index=0;
while(mid[index]!=ch)index++;
bitree T=new binode;
T->data=ch;
T->lchild=pre_mid_create(pre+1,mid,index);
T->rchild=pre_mid_create(pre+index+1,mid+index+1,n-index-1);
return T;
}
//利用中序+后序序列建立二叉树
bitree hikaka_tree::post_mid_create(char *last,char *mid,int n)
{
if(n==0)
return nullptr;
char ch=last[n-1];
int index=0;
while(mid[index]!=ch)index++;
bitree T=new binode;
T->data=ch;
T->lchild=post_mid_create(last,mid,index);
T->rchild=post_mid_create(last+index,mid+index+1,n-index-1);
return T;
}