1364 (二叉树扫描(flist ) ) ) ) ) )。
时间限制: 1000 ms内存限制: 65536 KB
【主题说明】
树和二叉树基本上有先序、中序、后序、逐层扫描等扫描顺序,给定中序和其他扫描顺序可以确定一个二叉树的结构。
假设一棵树的一个节点是用一个字符描述的,现在给出按中序和逐层扫描的字符串,求出该树开头的扫描字符串。
【输入】
两行,每行是由字母构成的字符串,一行中的每个字符是唯一的。 分别表示二叉树的中顺扫描和逐层扫描的顺序。
【输出】
一行表示二叉树的优先级序列。
【输入样品】
DBEAC
ABCDE
【输出样品】
阿布德克
想法:层次遍历的结果都是途径。 当进行层次遍历时,如果你遍历左边的子树,那么当左边的子树第一次等于层次遍历时,它是根。 然后递归输出即可。
# include cstdio # include cstring # includeiostreamusingnamespacestd; string s1、s2; voidf(intL1、int r1、int l2、int r2 )/L1、r1中依次扫描、l2、r2电平扫描({int i,j; for(I=L2; i=r2; I ()//在分层扫描中优先输出根节点的位置int t=0; for(j=L1; j=r1; j () if ) S2[I]==S1[j] ) /根节点cout s1[j]; t=1; 布雷克; }if(t ) break; (if ) jL1 ) f ) L1,j-1,0,r2 ); //遍历左子树if(JR1 ) f ) j1、R1、0、r2; //遍历右边的子树}int main () IOs :3360 sync _ with _ stdio (false ); cin s1 s2; f(0,s1.size )-1,0,s2.size )-1 ); 返回0; }