已知二叉树的前序preOrder中序midOrder求后序postOrder。
程序并不难,利用递归,依次递归左右子树,最后输出根,代码类似于常规二叉树的后序遍历。
在函数体里面加了一些变量,方便代码的阅读。

#include <iostream>
#include <string>
using namespace std;
void postOrder(string& preOrder, string& midOrder)
{
    if (preOrder.length() == 0)
        return;
    char root = preOrder[0];
    int rootIndex = midOrder.find(root);
    string leftPre = preOrder.substr(1, rootIndex); //左子树的前序
    string rightPre = preOrder.substr(rootIndex + 1); //右子树的前序
    string leftMid = midOrder.substr(0, rootIndex); //左子树的中序
    string rightMid = midOrder.substr(rootIndex + 1); //右子树的中序
    postOrder(leftPre, leftMid); //递归左子树
    postOrder(rightPre, rightMid); //递归右子树
    cout << root; //输出根
}
int main()
{
    string preOrder, minOrder;
    while (cin >> preOrder >> minOrder)
    {
        postOrder(preOrder, minOrder);
        cout << endl;
    }
}