题海拾贝:[USACO3.4] 美国血统AmericanHeritage(求先序排列问题)

server/2025/1/6 5:50:08/

       Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

91bfeb2bb1414a2ebf09cbc4f9706779.gif

我的博客:<但凡.

我的专栏:《编程之路》、《数据结构算法之美》、《题海拾贝》

欢迎点赞,关注!

1、求解先序排列 

573ea37aabf14bb7810b379e85833513.png题解:

      题目给了中序和后序排列,让我们求先序。

      首先根据后序,我们能确定根,也就是后序德最后一个字母

      再从中序中找到根节点,这样,根节点之前的就是左子树,后面的就是右子树。我们再把左右子树对应的中序,后序排列传进函数,运用递归求解出先序排列。

#include<iostream>
#include<string>
using namespace std;
const int N = 1e5 + 10;
string m;
string e;//存中序和后序排列
void dfs(int l1, int r1, int l2,int r2)
{if (r1 < l1 ||r2<l2){return ;}//当左右子树不合法时退出递归char ch = e[r2];cout << ch;int p=0;while (m[p] != ch){p++;}//p指向根的位置//把左右子树的中序和后序对应传入dfs进行递归int d = p - l1;//子树长度//注意区分l和1.d等于p减去第一个下标l,也就是0dfs(l1, p - 1,l2,l2+d-1);dfs(p + 1, r1, l2 + d, r2 - 1);
}
int main()
{cin >> m;cin >> e;int l1 = 0;//中序排序的第一个节点int r1 = m.size() - 1;//中序排序的最后一个节点int l2 = 0;//后序排序的第一个节点int r2 = e.size() - 1;//后序排序的最后一个节点//注意传入的第一个节点的下标是0dfs(l1,r1,l2,r2);return 0;
}

2、美国血统

ad2feb8a78a345dbbddcdde91ef3aa99.png

题解:

      这个题和上面的几乎一样。

#include<iostream>
#include<string>
using namespace std;
const int N = 1e5 + 10;
string m;
string e;
void dfs(int l1, int r1, int l2,int r2)
{if (r1 < l1 || r2 < l2){return;}char ch = e[l2];//根int p=0;while (m[p] != ch) p++;int d = p - l1;dfs(l1, p-1, l2+1, l2 + d);dfs(p+1, r1, l2 + d + 1, r2);//左右子树对应的前序和中序cout << ch;
}
int main()
{//美国血统//给定中序和前序求解后序cin >> m >> e;int l1 = 0;int r1 = m.size() - 1;int l2 = 0;int r2 = e.size() - 1;//对应的中序和前序的首末节点(字符)dfs(l1, r1, l2, r2);return 0;
}

       好了,今天的内容就分享到这,我们下期再见!


http://www.ppmy.cn/server/155731.html

相关文章

植物活性长末端重复序列反转录转座子研究进展-文献精读95

Plant active LTR retrotransposons: a review 植物活性长末端重复序列反转录转座子研究进展 摘要 长末端重复序列 (Long terminal repeat&#xff0c;LTR) 反转录转座子是真核生物基因组中普遍存在的一类可移动的DNA序列&#xff0c;它们以RNA为媒介&#xff0c;通过“复制粘…

Bash 中的 2>1 | tee 命令详解

Bash 中的 2>&1 | tee 命令详解 在 Linux 和 Unix 系统中&#xff0c;命令行提供了强大的输出控制功能&#xff0c;能够灵活地处理标准输入&#xff08;stdin&#xff09;、标准输出&#xff08;stdout&#xff09;和标准错误&#xff08;stderr&#xff09;。本文将详…

深入AIGC领域:ChatGPT开发者获取OpenAI API Key的实用指南

在AIGC&#xff08;人工智能生成内容&#xff09;领域&#xff0c;ChatGPT作为一种强大的自然语言处理工具&#xff0c;正逐渐成为开发者们不可或缺的助手。然而&#xff0c;要充分发挥ChatGPT的潜力&#xff0c;首先需要获取OpenAI的API Key。本文将详细介绍如何获取OpenAI AP…

Redis数据库——数据结构类型

本文详细介绍Redis 提供的5种基本数据结构类型和4种特殊类型&#xff0c;除此之外&#xff0c;还有8种底层数据结构&#xff0c;每种结构类型有其特点和适用场景。 文章目录 基本数据类型1. String&#xff08;字符串&#xff09;使用场景缓存计数器ID 生成器分布式锁 2. Hash&…

并联带阻滤波器带通滤波器对幅值和相位的影响(IIR)

一、背景 输入信号input分别经过bp(带通滤波器)和bs&#xff08;带阻滤波器&#xff09;处理后相加输出。分析输出信号的幅值和相位受到的影响。 根据上图公式推导可知&#xff0c;并联滤波器对输出的影响可以直接分析&#xff0c;带通滤波器与带阻滤波器在频域上的加和。 二、…

MYSQL无法被连接问题

如果您在尝试连接到MySQL服务器时遇到问题&#xff0c;以下描述了您可以采取的一些措施来纠正该问题。 确保服务器正在运行。如果没有&#xff0c;则客户端无法连接到它。例如&#xff0c;如果尝试连接到服务器失败并出现以下消息之一&#xff0c;则可能是服务器未运行&#xf…

力扣面试题 43 - 递归乘法 C语言解法

题目&#xff1a; 递归乘法。 写一个递归函数&#xff0c;不使用 * 运算符&#xff0c; 实现两个正整数的相乘。可以使用加号、减号、位移&#xff0c;但要吝啬一些。 示例1: 输入&#xff1a;A 1, B 10输出&#xff1a;10示例2: 输入&#xff1a;A 3, B 4输出&#xff1…

六十一:HTTP/2的问题及HTTP/3的意义

随着互联网的快速发展&#xff0c;网络协议的升级成为优化用户体验和提升网络效率的重要手段。HTTP/2 于 2015 年发布&#xff0c;标志着超文本传输协议的重大改进。然而&#xff0c;尽管 HTTP/2 带来了许多新特性&#xff0c;它也存在一定的问题。在此背景下&#xff0c;HTTP/…