#include#include #include #include using namespace std; char pre[30],in[30]; struct Node { char data; struct Node *lchild,*rchild; }; struct Node *root; void combine(int l1,int r1,int l2,int r2,Node *&tree)//还原二叉树 { if(l1>r1||l2>r2) return; int i,j; for(i=l1,j=l2;i<=r1;++i,++j) { if(in[j]==pre[l1]) break; } tree=new Node; tree->lchild=NULL; tree->rchild=NULL; tree->data=pre[l1]; combine(l1+1,i,l2,j-1,tree->lchild);//重复 combine(i+1,r1,j+1,r2,tree->rchild); } void postorder(Node *tree)//后序遍历 { if(tree==NULL) return; postorder(tree->lchild); postorder(tree->rchild); cout< data; } int main() { scanf("%s%s",&in,&pre); getchar();//吸收空格 int len=strlen(pre);//计算节点个数 combine(0,len-1,0,len-1,root);//还原二叉树 postorder(root);//后序遍历 }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)