首页 > 编程知识 正文

已知层次遍历和中序遍历求二叉树,层次遍历和中序遍历构建二叉树

时间:2023-05-06 12:06:00 阅读:54056 作者:2116

时间限制: 1000 ms内存限制: 65536 KB

提交数: 860通过数: 552

【题目说明】树和二叉树基本上有先序、中序、后序、逐层扫描等扫描顺序,给出中序和其他扫描顺序可以确定一个二叉树的结构。

假设一棵树的一个节点是用一个字符描述的,现在给出按中序和逐层扫描的字符串,求出该树开头的扫描字符串。

【输入】两行。 每行是由字母构成的字符串,一行中的每个字符是唯一的。 分别表示二叉树的中顺扫描和逐层扫描的顺序。

【输出】一行表示二叉树的优先级序列。

【输入示例】DBEACABCDE【输出示例】ABDEC 思路:

每次遍历层次的数组在vis中将已经输出的数组标记为1

对于每个子树,以范围表示中顺扫描的数组下标范围。

通过检查层序横移序列,发现序列中出现的第一个(最初为根)满足不输出,且出现在中序横移的数字范围内。

该值是子树的根。

代码如下:

# include iostream # include cstdio # include algorithm # include string # include cstring # include queue # include stack # include cring 定义lson l,m,rt1 #定义rson m 1,r,rt1|1typedef pairint,intP; const int INF=0x3f3f3f3f; const int N=200015,mod=32767; int vis[N]; char s1[N],s2[N]; 语音求解(intnow,int len1,int len2) { int i,j; for(I=0; ilen2; I ) (/从层序遍历到根节点if(vis[I] ) continue; for(j=now; jlen1; j () if ) S1[j]==s2[i] ) printf )、S2[I]; vis[i]=1; 布雷克; }if(vis[I] ) break; (if ) jnow ) solve ) now,j,len2; if(j1len1) solve ) j1、len1、len2); (}int main ) ) Scanf('%s%s ',s1,s2 ); 求解(0,strlen ) S1 ),strlen S2 ); printf((n ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。