编辑
2023-10-22
数据结构与算法
00
请注意,本文编写于 566 天前,最后修改于 566 天前,其中某些信息可能已经过时。

中序遍历为: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 许可协议。转载请注明出处!