题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。
输入格式
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
1行,表示一棵二叉树的先序。
输入输出样例
输入 #1
BADC BDCA
输出 #1
ABCD
说明/提示
【题目来源】
NOIP 2001 普及组第三题
/*
* @Description: To iterate is human, to recurse divine.
* @Autor: Recursion
* @Date: 2022-03-10 11:58:25
* @LastEditTime: 2022-03-10 12:44:56
*/
#include<bits/stdc++.h>
using namespace std;
char s1[10];
char s2[10];
int len;
int find(char ch)
{
for(int i=0;i<len;i++){
if(s1[i]==ch) return i;
}
}
void dfs(int l1,int r1,int l2,int r2)
{
int pos=find(s2[r2]);
cout<<s2[r2];
if(pos>l1)/*具有左子树*/ dfs(l1,pos-1,l2,r2-(r1-pos)-1);//r1-m为右子树结点数
if(pos<r1) /*具有右子树*/dfs(pos+1,r1,l2+pos-l1,r2-1);//m-l1为左子树节点数
}
int main()
{
cin>>s1;
cin>>s2;
len=strlen(s1);
dfs(0,len-1,0,len-1);
}
本文介绍如何根据给定的二叉树中序和后序遍历序列,通过递归方法计算其先序遍历。通过实例展示了如何使用C++实现这一过程,适用于NOIP2001普及组比赛题目。
430

被折叠的 条评论
为什么被折叠?



