#include <bits/stdc++.h>
using namespace std;
vector<int> level(10000, -1);
vector<int> in, pre;
void leveorder(int root, int start, int end, int index)
{
if (start > end)
return;
int i = start;
while (i < end && in[i] != pre[root])
{
i++;
}
level[index] = pre[root];
leveorder(root + 1, start, i - 1, 2 * index + 2);
leveorder(root + 1 + i - start, i + 1, end, index * 2 + 1);
}
int main()
{
int n, cnt = 0;
cin >> n;
in.resize(n);
pre.reserve(n);
for (int i = 0; i < n; i++)
{
cin >> in[i];
}
for (int i = 0; i < n; i++)
{
cin >> pre[i];
}
leveorder(0, 0, n - 1, 0);
for (int i = 0; i < level.size(); i++)
{
if (level[i] != -1 && cnt != n - 1)
{
cout << level[i]<<" ";
cnt++;
}
else if (level[i] != -1)
{
cout << level[i];
break;
}
}
return 0;
}
L2-011 玩转二叉树 (25 分)
最新推荐文章于 2024-07-26 22:53:48 发布
本文介绍了一种使用递归方法实现二叉树层次遍历的算法,并提供了完整的 C++ 代码示例。该算法首先定义了节点的层级,然后通过前序遍历的方式递归地填充每个层级的节点值。

1158

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



