题目描述
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
输出样例:
4 1 6 3 5 7 2
#include <iostream>
#include <queue>
using namespace std;
int post[31], in[31];
typedef struct bitnode{
int data;
struct bitnode *lchild, *rchild;
}BiTNode, *BiTree;
BiTree buildTree(int root, int start, int end){
if(start > end) return NULL;
BiTree p = (BiTNode*)malloc(sizeof(BiTNode));
p->data = post[root];
int i;
for(i = start; i < end; i++){
if(in[i] == post[root])
break;
}
p->lchild = buildTree(root-1-(end-i), start, i-1);
p->rchild = buildTree(root-1, i+1, end);
return p;
}
queue<BiTree> q;
void Levelorder(BiTree bt){
q.push(bt);
int num = 0;
while(!q.empty()){
BiTree tmp = q.front();
if(num > 0) cout << " ";
cout << tmp->data;
if(tmp->lchild) q.push(tmp->lchild);
if(tmp->rchild) q.push(tmp->rchild);
q.pop();
num++;
}
}
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++){
cin >> post[i];
}
for(int i = 0; i < n; i++){
cin >> in[i];
}
BiTree bt = buildTree(n-1, 0, n-1);
Levelorder(bt);
}