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

京公网安备 11010502036488号