和刚刚之前的那道题类似,只不过多考察了一个四大遍历输出中的一个;自己跟个智障一样检查了一个小时,结果发现少了一个返回指针,真是干他娘的;
#include#include #include #include #include #include using namespace std;using std::vector;const int maxn=40;int n;vector pre;vector in;stack s;struct node{ int data; node* lchild; node* rchild;};node* create(int prel,int prer,int inl,int inr){ if(prel>prer) return NULL; node* root=new node; root->data=pre[prel]; int i; for(i=inl;i<=inr;i++){ if(in[i]==pre[prel]) break; } int lnum=i-inl; root->lchild=create(prel+1,prel+lnum,inl,i-1); root->rchild=create(prel+lnum+1,prer,i+1,inr); return root;}int num=0;void postorder(node* root){ if(root==NULL) return; postorder(root->lchild); postorder(root->rchild); printf("%d",root->data); num++; if(num