典型的数据结构体,根据后序和中序确定树,然后层序遍历该二叉树。
// 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;
}