典型的数据结构体,根据后序和中序确定树,然后层序遍历该二叉树。
// 1020. Tree Traversals.cpp: 主项目文件。 #include "stdafx.h" #include <cstdio> #include <cstring> #include <queue> using namespace std; typedef struct BitNode{ int value; BitNode *lchild,*rchild; }BitNode; void createTree(BitNode *&root,int *in,int l1,int h1,int *post,int l2,int h2){ if(l1<=h1&&l2<=h2){ int vv=post[h2],midIndex=-1; for(int i=l1;i<=h1;i++){ if(vv==in[i]){ midIndex=i; break; } } root=(BitNode*)malloc(sizeof(BitNode)); root->value=vv,root->lchild=root->rchild=NULL; int llen=midIndex-l1; createTree(root->lchild,in,l1,midIndex-1,post,l2,l2+llen-1); createTree(root->rchild,in,midIndex+1,h1,post,l2+llen,h2-1); } } void levelTraverse(BitNode *root){ queue<BitNode*> Q; Q.push(root); bool tag=true; while(!Q.empty()){ BitNode* temp=Q.front(); if(tag) tag=false; else printf(" "); printf("%d",temp->value); Q.pop(); if(temp->lchild!=NULL) Q.push(temp->lchild); if(temp->rchild!=NULL) Q.push(temp->rchild); } printf("\n"); } int main() { const int N=31; int post[N],in[N]; int length; scanf("%d",&length); for(int i=0;i<length;i++) scanf("%d",post+i); for(int i=0;i<length;i++) scanf("%d",in+i); BitNode *root=NULL; createTree(root,in,0,length-1,post,0,length-1); levelTraverse(root); return 0; }