已知二叉树的前序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; } }