Title Description
Divide and conquer the thought, the recursive solution.
First achievement and then post-traversal:
#include <iostream> #include <algorithm> #include <cstring>using namespace Std;char pre[26], mid[26]; Typedefstruct _tree {char c;_tree *lc, *rc;_tree (char ch) {c = ch;}} Tree, *ptree; PTree maketree (int pb, int mb, int len) {if (len <= 0) return Nullptr;char Root_char = Pre[pb];int idx;for (idx = MB; i DX < MB + len; idx++) {if (mid[idx] = = Root_char) {break;}} PTree root = new Tree (Root_char), ROOT->LC = Maketree (pb + 1, MB, IDX-MB), ROOT->RC = Maketree (pb + 1 + idx-mb, ID x + 1, MB + len-idx-1); return root;} void Post_traverse (PTree root) {if (root = nullptr) return;post_traverse (ROOT->LC);p ost_traverse (ROOT->RC); cout << root->c;} int main () {CIN >> pre >> Mid;int len = strlen (pre); PTree root = maketree (0, 0, len);p ost_traverse (root); return 0;}
In fact, the process can be omitted, the processing of direct output after the post-traversal results:
#include <iostream> #include <algorithm> #include <cstring>using namespace Std;char pre[26], mid[26]; void Solve (int pb, int mb, int len) {if (len <= 0) Return;char Root_char = Pre[pb];int idx;for (idx = MB; idx < MB + Len idx++) {if (mid[idx] = = Root_char) {break;}} Solve (PB + 1, MB, IDX-MB), solve (PB + 1 + idx-mb, idx + 1, MB + len-idx-1); cout << Root_char;} int main () {CIN >> pre >> Mid;int len = strlen (pre); solve (0, 0, Len); return 0;}
[Hiho 10] sequential traversal by sequence traversal