#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
//根据先序和中序求后序
void LastOrd(string PreOrder, string MidOrder, int n)
{
if (n == 0)
return;
if (n == 1)
{
cout << PreOrder[0];
return;
}
size_t rootPos = MidOrder.find(PreOrder[0]);
string subPreOrder1 = PreOrder.substr(1, rootPos);
string subPreOrder2 = PreOrder.substr(1 + rootPos, string::npos);
string subMinOrder1 = MidOrder.substr(0, rootPos);
string subMinOrder2 = MidOrder.substr(rootPos + 1, string::npos);
LastOrd(subPreOrder1, subMinOrder1, rootPos);
LastOrd(subPreOrder2, subMinOrder2, n - rootPos - 1);
cout << PreOrder[0];
}
int main()
{
string PreOrder, MidOrder;
while (cin >> PreOrder >> MidOrder)
{
LastOrd(PreOrder, MidOrder, PreOrder.size());
cout << endl;
}
return 0;
}
根据先序和中序求后序,注意递归终止条件
最新推荐文章于 2022-05-14 13:41:09 发布