问题标题: 酷町堂:2111

0
0
已解决
曹博扬
曹博扬
初级天翼
初级天翼

#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
string s1,s2;
void calc(int l1,int r1,int l2,int r2)
{
    int m=s2.find(s1[l1]);
    if(m>12)calc(l1+1,l1+m-l2,l2,m-1);
    if(m<r2)calc(l1+m-l2+1,r1,m+1,r2);
    cout<<s1[l1];
}
int main()
{
    cin>>s1>>s2;
    //freopen("tree.in","r",stdin);
    //freopen("tree.out","w",stdout);
    calc(0,s1.length()-1,0,s2.length()-1);
    cout<<endl;
    return 0;
}

求大神指点!!!


0
已采纳
徐紫尘
徐紫尘
高级光能
高级光能

先看↓

假设二叉树一共有n个结点。

1.先序遍历的第一个结点为整个二叉树的根,找到这个结点在中序遍历中的位置p(是第几个结点)。

2.这个二叉树的左子树
先序遍历是原二叉树先序遍历的第2到第p个,中序遍历是原二叉树中序遍历的第1到第p-1个。

3.这个二叉树的右子树
先序遍历是原二叉树先序遍历的第p+1到第n个,中序遍历是原二叉树中序遍历的第p+1到第n个。

4.通过递归可以还原这个二叉树,递归的终止条件是二叉树只有一个根结点。

5.把还原的二叉树后续遍历并输出。

-----------------------------------------------------------------------------------------------------------------------------------------------

再看↓

string s1,s2;
int pos(char c,string s)
{
    int i,l;
    l=s.size();
    for (i=0;i<l;i++)
      if (c==s[i])
        return i;
}
void tr(int l1,int r1,int l2,int r2)
{
    int m;
    m=pos(s1[l1],s2);
    if (m>l2) 
      tr(l1+1,l1+m-l2,l2,m-1);
    if (m<r2)
      tr(l1+m-l2+1,r1,m+1,r2);
    cout<<s1[l1];
}

懂了吗?

我要回答