树的遍历(待写)
给定中序和其他一种遍历的序列可以确定一颗二叉树的结构。
#include <bits/stdc++.h>
using namespace std;
const int N = 35;
int n;
int a[N], b[N], p[N];
vector<int> level[N];
// al:a数组的左端点
// bl:b数组的左端点
// d:层数
void build(int al, int ar, int bl, int br, int d)
{
if (al > ar) return;
// 取a数组的右端点 也就是当前树的根节点。
int val = a[ar];
// 这里因为先遍历的左子树,然后遍历的右子树,进入递归了它的深度会加1,
// 但是当遍历同深度的右子树的时候,它的深度就又回来了。
level[d].push_back(val);
// 找到根节点再中序数组中的位置。
int k = p[val];
// 先遍历左子树
build(al, al + k - 1 - bl, bl, k - 1, d + 1);
// 然后遍历右子树
build(al + k - bl, ar - 1, k + 1, br, d + 1);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
for (int i = 0; i < n; i ++ ) cin >> b[i];
// 这是为了方便从后序中的根节点快捷的找到中序数组中的位置。注意里面是中序遍历的数组。
for (int i = 0; i < n; i ++ ) p[b[i]] = i;
build(0, n - 1, 0, n - 1, 0);
for (int i = 0; i < n; i ++ )
for (int x : level[i])
cout << x << ' ';
return 0;
}
版权声明:
作者:Reid
链接:https://www.ricemoon.cn/algorithm/tmplate/115.html
来源:RiceMoon
文章版权归作者所有,未经允许请勿转载。
THE END
0
二维码
海报
树的遍历(待写)
给定中序和其他一种遍历的序列可以确定一颗二叉树的结构。
#include <bits/stdc++.h>
using namespace std;
const int N = 35;
int n;
int a[N], b[N……

共有 0 条评论