知後根、中根,求先根
阿新 • • 發佈:2018-12-13
設s1為樹的後根遍歷,s2為樹的中根遍歷,則s1[len - 1]為先根遍歷的第一個節點,且s2中,s1[len - 1]左邊的字元為s1[len - 1]的左子樹,右邊即是右子樹。
例:中根:DBEAFC
後根:DEBFCA
此時A是樹的根節點,根節點的左子樹的中根遍歷是BDE,右子樹的中根遍歷是FC,左子樹的後根DEB,右子樹的後根FC
子樹也是樹,遞迴。
#include <iostream> #include <cstring> using namespace std; void f(char s1[], char s2[], int len) { if (len == 1) { cout << s1[len - 1]; } else if (len > 1) { cout << s1[len - 1]; char* index = strchr(s2, s1[len - 1]); int new_len = (int)(index - s2); f(s1, s2, new_len); f(s1 + new_len, index + 1, len - new_len - 1); } } int main() { char s1[100], s2[100]; //s1後序, s2中序 cin >> s1 >> s2; f(s1, s2, (int)strlen(s1)); return 0; }