中序遍历为:ABEDFCHG,前序遍历为:CBADEFGH。
那么根节点就是C。 于是找到了中序遍历的左子树:ABEDF 和右子树:HG。
紧接着,前序遍历找到了左子树:BADEF 和右子树:GH。
于是,我们可以继续递归下去,直至字符串为空。
cpp#include <iostream>
using namespace std;
string generatePostOrder(string inOrder, string preOrder) {
if (inOrder.empty() || preOrder.empty()) {
return "";
}
char root = preOrder[0];
int rootIndex = inOrder.find(root);
string leftInOrder = inOrder.substr(0, rootIndex);
string rightInOrder = inOrder.substr(rootIndex + 1);
string leftPreOrder = preOrder.substr(1, rootIndex);
string rightPreOrder = preOrder.substr(rootIndex + 1);
string leftPostOrder = generatePostOrder(leftInOrder, leftPreOrder);
string rightPostOrder = generatePostOrder(rightInOrder, rightPreOrder);
return leftPostOrder + rightPostOrder + root;
}
int main() {
string inOrder, preOrder;
cin >> inOrder >> preOrder;
string postOrder = generatePostOrder(inOrder, preOrder);
cout << postOrder << endl;
return 0;
}
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!