Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.
Sample Input:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
Sample Output:
4 1 6 3 5 7 2
#include <iostream>
#include <queue>
using namespace std;
int PostOrder[30];
int InOrder[30];
struct node {
node *lchild;
node *rchild;
int data;
};
node *create(int postL, int postR, int inL, int inR) {
if (postR < postL)
return nullptr;
node *root = new node;
root->data = PostOrder[postR];
int k;
for (k = inL; k <= inR; ++k) {
if (PostOrder[postR] == InOrder[k])
break;
}
int numLeft = k - inL;
root->lchild = create(postL, postL + numLeft - 1, inL, k - 1);
root->rchild = create(postL + numLeft, postR - 1, k + 1, inR);
return root;
}
void LayerOrder(node *root) {
queue<node *> q;
q.push(root);
cout << root->data;
int count = 0;
while (!q.empty()) {
node *ans = q.front();
if (count)
cout << " " << ans->data;
q.pop();
if (ans->lchild != nullptr)
q.push(ans->lchild);
if (ans->rchild != nullptr)
q.push(ans->rchild);
count++;
}
}
int main() {
int N;
cin >> N;
for (int i = 0; i < N; ++i) {
cin >> PostOrder[i];
}
for (int i = 0; i < N; ++i) {
cin >> InOrder[i];
}
node *root = create(0, N - 1, 0, N - 1);
LayerOrder(root);
return 0;
}
本文介绍了一种根据给定的后序遍历和中序遍历序列构建二叉树,并输出该树的层次遍历序列的方法。通过递归地创建二叉树节点,最后使用队列实现层次遍历。
1461

被折叠的 条评论
为什么被折叠?



