已知层序和中序也可以唯一确定一棵树,构建树的思路是遍历层序在中序中寻找优先输出根结点的位置,并递归建树,每次递归层序的范围不改变。
#includeusing namespace std;const int maxn=1e3+5;int level[maxn],in[maxn];struct node{ int key; node *left,*right;};node *build(int l,int r,int ll,int rr){ if(l>r) return nullptr; int i,j; for(i=ll;i<=rr;i++){ bool flag=true; for(j=l;j<=r;j++){ if(level[i]==in[j]){ flag=false; break; } } if(!flag) break; } node *root=new node(); root->key=level[i]; root->left=build(l,j-1,ll,rr); root->right=build(j+1,r,ll,rr); return root;}void preorder(node *root){ if(root==nullptr) return; printf("%d ",root->key); preorder(root->left); preorder(root->right);}int main(){ int n; scanf("%d",&n); for(int i=0;i