题目要求:根据中序和后序建树,然后"zigzagging order" 进行层序遍历
这个还蛮好玩的说
在层序遍历过程中,存储下层数,用vector<int> v[maxn]存储对应层的结点。
#include<bits/stdc++.h>
using namespace std;
const int maxn=31;
int inorder[maxn],post[maxn];
vector<int> v[maxn];int maxlayer;
struct Node{
int data;int layer;
Node* left;
Node* right;
};
Node* gettree(int li,int ri,int lp,int rp,int length){
if(length<=0) return NULL;
Node* root=new Node();
root->data=post[rp];
int j;
for(j=li;j<=ri&&inorder[j]!=post[rp];j++);
int l=j-li;int r=ri-j;
root->left=gettree(li,j-1,lp,lp+l-1,l);
root->right=gettree(j+1,ri,rp-r,rp-1,r);
return root;
}
void Zig(Node* root){
queue<Node*> q;
root->layer=0;
q.push(root);
while(!q.empty()){
Node* now=q.front();
v[now->laye