落谷二叉树根据前序遍历和中序遍历,输出后序遍历

问题描述

落谷二叉树根据前序遍历和中序遍历,输出后序遍历_第1张图片

思路

如果在纸上来写这个题目,我们呢就会发现会有很多重复的,类似的步骤,这就可以利用递归,个人建议自己在纸上画出解题的过程,递归的条件和过程就会比较清楚

代码

#include 
#include 
using namespace std;
string a,b;//a代表前序遍历,b代表中序遍历
void houxu(int x,int y,int p,int q)//x到y表示前序遍历的范围,p到q表示中序遍历范围
{
    if(x>y||p>q) return;
    int i=b.find(a[x]);//在中序遍历中找到当前前序遍历的根节点,记录位置
    //i的左边就是当前根节点的左子树,右边就是右子树
    houxu(x+1,x+i-p,p,i-1);//后序遍历左子树
    //当前根节点的左子树的前序,中序遍历,从哪开始,到哪结束,对应的参数就要发生变化
    houxu(x+i-p+1,y,i+1,q);
    cout<<a[x];
}
int main()
{
    cin>>b>>a;
    houxu(0,a.size()-1,0,b.size()-1);
    return 0;
}

你可能感兴趣的:(二叉树,递归,二叉树,递归法,数据结构)