二叉树 根据先序,中序求出后序

例题进入

第一行: 树的中序遍历

第二行: 同样的树的前序遍历

例如:ABEDFCHG

          CBADEFGH    

求后序遍历:


从先序中第一个为根节点,再从中序中,找到它的位置,找到后,左边是左树,右边是右树,分别递归(找到两数分别在中序和先序中的范围!!!)

核心:不断分割,两次递归,先遍历左树,后右树,再打出根节点。(这就是后序遍历)

#include
#include 
char s1[100], s2[100];
void fun(l1,r1,l2,r2)    //l1,r1中序范围    l2,r2先序范围     
{
    if (l1 > r1 || l2 > r2) {
        return;
     }
    for (int i = l1; i <= r1; i++) {
        if (s1[i] == s2[l2]) {
            fun(l1, i - 1, l2 + 1, l2 + i - l1);
            fun(i + 1, r2, l2 + i - l1+1, r2);
            printf("%c", s1[i]);
        }
    }
}
int main() {
    scanf("%s %s", s1, s2);
    int len = strlen(s1);
    fun(0, len-1, 0, len-1);
    return 0;
}

你可能感兴趣的:(算法,c++,数据结构)