利用中序和后序构建出层序遍历数组,并求出最大深度
层序遍历用vector保存在q[i]中(i为深度)
然后按照深度的奇偶
正向输出或反向输出
#include<iostream>
#include<vector>
using namespace std;
int n, po[35], in[35],maxdep=0;
vector<int> q[35];
//用中序和后序构建层次序列 分层存储
void creat(int l1, int r1, int l2, int r2, int dep)
{
if (l1 > r1) return;
int i = l2;
for (;i <= r2;i++)
if (po[r1] == in[i]) break;
q[dep].push_back(po[r1]); //保存深度为dep 的序列
if (maxdep < dep) maxdep = dep;
creat(l1, l1 + i - l2 - 1, l2, i - 1,dep+1); //左子树
creat(l1 + i - l2, r1 - 1, i + 1, r2,dep+1); //右子树
}
int main()
{
cin >> n;
for (int i = 1;i <= n;i++) cin >> in[i];
for (int i = 1;i <= n;i++) cin >> po[i];
creat(1, n, 1, n,1);
cout << q[1][0];
for (int i = 2;i <= maxdep;i++)
{
if (i % 2 == 0)
for (int j = 0;j < q[i].size();j++) cout << " " << q[i][j];
else
for (int j = q[i].size() - 1;j >= 0;j--) cout << " " << q[i][j];
}
system("pause");
return 0;
}