信息学奥赛一本通1364:二叉树遍历(flist)

1364:二叉树遍历(flist)

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 1855 通过数: 1185

【题目描述】

树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。

假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。

【输入】

两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。

【输出】

一行,表示二叉树的先序序列。

【输入样例】

DBEAC
ABCDE

【输出样例】

ABDEC

代码

//hanbi code
//2019.11.29
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
string s1,s2;
int l;
void find(int l1,int r1)
{
    int i,j;
    for(i=0;i<=l;i++)//循环次数一次也不能少 
    {
        int f=0;
        for(j=l1;j<=r1;j++)
        {
            if(s2[i]==s1[j])
            {
                cout<<s1[j];
                f=1;
                break;
            }
        }
        if(f)
            break;
    }
    if(j>l1)
        find(l1,j-1);
    if(j<r1)
        find(j+1,r1);
}
int main()
{
    cin>>s1>>s2;
    l=s2.length();
    find(0,s1.length()-1);//s1.length()=s2.length()
    return 0;
}

笔记

  • 第一次循环时s1.length()=s2.length(),但在递归(?)时,由于l1,r1参数不同此时需要一个全局变量l来记录长度
  • int k=0x7ffff;//max赋最大值的方法
  • for(int i=0;i<=l;i++)
    {map[s2[i]]=i;//record dizhi }存地址
  • 虽然2 、 3点没用上哈哈
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值