1. 程式人生 > >知後根、中根,求先根

知後根、中根,求先根

設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;
}