題意大概是以字符串的形式輸入前序遍歷和中序遍歷,輸出后序遍歷。
一個(gè)栗子 ↓
輸入:ABDEC DBEAC
輸出:DEBCA
#include <iostream>
#include <string.h>
using namespace std;
void findPostorder(string preorder, int low_1, int high_1, string inorder, int low_2, int high_2, char* postorder, int low_3, int high_3) {
if (low_1 == high_1) {
postorder[high_3] = preorder[low_1];
return;
}
int i;
for (i = low_2; i <= high_2; i++) {
if (preorder[low_1] == inorder[i]) {
break;
}
}
postorder[high_3] = preorder[low_1];
findPostorder(preorder, low_1 + 1, low_1 + i, inorder, low_2, low_2 + i - 1, postorder, low_3, low_3 + i - 1);
findPostorder(preorder, low_1 + i + 1, high_1, inorder, low_2 + i + 1, high_2, postorder, low_3 + i, high_3 - 1);
}
int main() {
string preorder, inorder;
cin >> preorder >> inorder;
int length = preorder.size();
char postorder[length];
//對(duì)后序遍歷所在的字符串?dāng)?shù)組進(jìn)行填充
findPostorder(preorder, 0, length - 1, inorder, 0, length - 1, postorder, 0, length - 1);
for (int i = 0; i < length; i++) {
cout << postorder[i];
}
return 0;
}