中序、后序→前序
#include <iostream>
#include <string>
using namespace std;string preorderResult;
string inorder, postorder;
void buildAndPreorder(int inStart, int inEnd, int postStart, int postEnd) {if (inStart > inEnd || postStart > postEnd) {return; }char rootVal = postorder[postEnd];preorderResult += rootVal;int rootIndex = inStart;while (rootIndex <= inEnd && inorder[rootIndex] != rootVal) {rootIndex++;}int leftSize = rootIndex - inStart;buildAndPreorder(inStart, rootIndex - 1, postStart, postStart + leftSize - 1);buildAndPreorder(rootIndex + 1, inEnd, postStart + leftSize, postEnd - 1);
}int main() {cin >> inorder >> postorder; buildAndPreorder(0, inorder.size() - 1, 0, postorder.size() - 1);cout << preorderResult << endl; return 0;
}