已知前序中序,求后序

已知二叉树的前序和中序,求其后序

例:前序(A B D G H C E I F J ) 中序(G D H B A E I C J F) 其后序为:G H D B I E J F C A

思路:先序的遍历规则为根—左—右,中序的遍历规则为左—根—右,所以我们在中序中找到与A(A必为根)相等的字符,则在中序中G D H B为A的左子树,E I C J F为A的右子树,在左子树和右子树中,重复前面过程,最后逆向将根打印出来,就是其后序。是一个递归过程
#include 
#include 
using namespace std;
string s;
string ss;
void tree(int a_l, int a_r, int b_l, int b_r)
{//a_l,a_r分别表示前序子树中的左右端点
    int i;
    if (a_l == a_r)
    {
        cout << s[a_l];
        return;//递归终止
    }
    for ( i = b_l; i <= b_r; i++)
    {
        if (s[a_l] == ss[i])
        {
            tree(a_l + 1, a_l + i - b_l, b_l, i - 1);//先处理左子树
            tree(a_l + i - b_l + 1, a_r, i + 1, b_r);//后处理右子树
            cout << s[a_l];
        }
    }
}
int main(void)
{
    cin >> s >> ss;
    tree(0, s.size() - 1, 0, ss.size() - 1);
    return 0;
}

你可能感兴趣的:(递归算法)