列表

详情


NC16692. [NOIP2001]求先序排列

描述

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度 ≤ 8)。

输入描述

2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。

输出描述

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

示例1

输入:

BADC
BDCA

输出:

ABCD

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 3ms, 内存消耗: 408K, 提交时间: 2022-04-07 20:38:12

#include<bits/stdc++.h>
using namespace std;
void solve(int l,char *a,char *b){
	for(int i=l-1;i>=0;i--){
		if(a[i]==b[l-1]){
			cout<<a[i];
			solve(i,a,b);
			solve(l-i,a+i,b+i-1);
		}
	}
}
int main(){
	char a[10],b[10];
	cin>>a>>b;
	int n=strlen(a);
	solve(n,a,b);
	return 0;
} 

pypy3 解法, 执行用时: 124ms, 内存消耗: 25832K, 提交时间: 2022-04-16 11:12:17

def dfs(mid, back):
    if len(mid) > 0:
        print(back[-1], end='')
        flag = mid.find(back[-1])
        dfs(mid[:flag], back[:flag])
        dfs(mid[flag + 1:], back[flag:len(mid) - 1])
mid = input()
back = input()
dfs(mid, back)

Python3 解法, 执行用时: 40ms, 内存消耗: 4540K, 提交时间: 2023-01-29 17:08:56

def dfs(a, b):
    if len(a) > 0:
        print(b[-1], end='')
        flag = a.find(b[-1])
        dfs(a[:flag], b[:flag])
        dfs(a[flag+1:], b[flag:len(a)-1])
mid = input()
back = input()
dfs(mid, back)

上一题