先序中序,后序中序,中序层序都可以唯一确定一棵树;
先序后序无法还原树的原因:当只有一棵子树时无法确定是左子树还是右子树;
写了一下中序层序还原树的递归和非递归方法。
用于检验算法的二叉树
中序序列为:6 7 4 11 2 5 9 8 10 1 3
层序序列为:2 7 5 6 11 1 4 8 3 9 10
递归方法
对于元素唯一的序列,记录层序各结点对应的下标,中序遍历序列的根节点肯定是在层序序列中下标数最小的结点!
- 代码
#include<bits/stdc++.h>
using namespace std;
#define N 1000
typedef struct node
{
int v;
node *l,*r;
}*pnode;
int car[N],inar[N];
map<int,int> cvis;
pnode func(int l,int r)
{
pnode p=NULL;
if(l<r)
{
p=(pnode)malloc(sizeof(node));
int mid=l;
for(int i=l+1;i<r;i++)
if(cvis[inar[mid]]>cvis[inar[i]])
mid=i;
p->v=inar[mid];
p->l=func(l,mid);
p->r=func(mid+1,r);
}