二叉樹先序+中序轉後序

1.Reference: 白書

2.思路:先序的首節點在中序中的位置,其左半邊爲左子樹,右半邊爲右子樹,同時要將其至於後續的尾節點,再進行遞歸即可。

3.代碼:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
input:樹的先序與中序
output:樹的後序
*/
void BuildPostOrder(char *str1, char *str2, char *ans, int length)
{
    if(length <= 0)
        return;
    int index = strchr(str2, str1[0]) - str2;  //先序的首節點在中序中的下標
    ans[length - 1] = str1[0];
    //利用下標,拆分左右子樹,進行遞歸
    BuildPostOrder(str1 + 1, str2, ans, index);
    BuildPostOrder(str1 + index + 1, str2 + index + 1, ans + index, length - index - 1);
}

int main()
{
    char *str1 = (char *)malloc(10 * sizeof(char));
    char *str2 = (char *)malloc(10 * sizeof(char));
    char *result = (char *)malloc(11 * sizeof(char));
    int length = 0;
    while(scanf("%s %s", str1, str2) == 2)
    {
        length = strlen(str1);
        BuildPostOrder(str1, str2, result, length);
        result[length] = '\0';
        printf("%s\n", result);
    }
    return 0;
}

4.結果
這裏寫圖片描述

以上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章