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点没用上哈哈