算法笔记--分治(求后序遍历)

一本通 1339:【例3-4】求后序遍历(二叉树遍历, 水题) 知道先序,中序,唯一确定一颗二叉树 阅读详情

由前序遍历和中序遍历求后序遍历

Sample Input
9
1 2 4 7 3 5 8 9 6
4 7 2 1 8 5 9 3 6

Sample Output
7 4 2 8 9 5 6 3 1

#include<cstdio>
int qian[1005],zhong[1005];
void ecs(int a,int b,int n,int flag)  //在前序是第几个,在中序是第几个,几个元素,是否第一棵树
{
    if(n==1)    //叶节点
    {
        printf("%d ",qian[a]);
        return;
    }
    else if(n<=0)  return; //如果不存在左子树或右子树就返回上一层
    int i;
    for(i=0;qian[a]!=zhong[b+i];i++);  //遍历左子树的数目
    ecs(a+1,b,i,0);             //左子树
    ecs(a+1+i,b+i+1,n-i-1,0);   //右子树

    if(flag==1)//最原始的跟节点
        printf("%d",qian[a]);
    else//一般的根节点
        printf("%d ",qian[a]);
}
int main()
{
    int n,i;
    while(scanf("%d",&n)==1)
    {
        for(i=1;i<=n;i++) scanf("%d",&qian[i]);
        for(i=1;i<=n;i++) scanf("%d",&zhong[i]);
        ecs(1,1,n,1);
        printf("\n");
    }
    return 0;
}
《算法设计与分析基础》读书笔记 一、算法与问题 算法是解决问题的一系列步骤; 理解问题,设计算法的一般过程: 二、蛮力法 蛮力法是一种简单直观的解决问题的办法,常常直接基于问题的描述和所涉及的概念。蛮力法所能解决的问题域也是最广的,但是效率往往不高; 使用蛮力法的算法有: 1、冒泡排序,选择排序 2,、顺序匹配 3、穷举法 三、分治法 分治法设计步骤: 1、将问题实例划分为同一问题的较小的实 阅读详情

相关推荐

算法笔记:分治法

算法笔记:分治法 一、相关概念 1. 分治:分而治之,即将较大规模的问题分解成几个较小规模的问题,通过对较小规模问题的求解达到对整个问题的求解。               当我们将问题分解成两个较小问题求解时的分治方法称之为二分法。 2. 基本思想(基本策略)     (1)分——分解(Divide):将一个规模为n的问题划分为k个规模更小的子问题;     (2)治——解决

cr496352127的博客 735

信息学奥赛一本通 1339:【例3-4】求后序遍历 | 洛谷 P1827 [USACO3.4] 美国血统 American Heritage

ybt 1339:【例3-4】求后序遍历 洛谷 P1827 [USACO3.4] 美国血统 American Heritage 两题都是已知先序和中序遍历序列,求后序遍历序列 区别为:【ybt 1339】先输入先序遍历序列,再输入中序遍历序列。【洛谷 P1827】先输入中序遍历序列,再输入先序遍历序列。已知先序中序求后序假设输入的中序遍历序列为:DBAECH,先序遍历序列为ABDCEF。以该输入为例讨论问题解法。 当前要解决的问题是:已知先序、中序遍历序列,构建二叉树。接下来对这棵树做后序遍历,即可得到树的

君义NOIP的博客 3415

真的神了~无意中发现1500道的2021LeetCode算法刷题pdf笔记

昨晚逛GitHub,无意中看到一位大佬的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到。 关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷力扣算法题后整理的上千道题,每道题均附有详细题解过程。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏安利。 累计1500+道...拿来即刷!word很大,你忍一下,我就不一一截图了,诸君自行下载哈。 可以看到,每道题的原题,题目大意,解题思路,以及代码实现都非常

Java高级面试 4891

1339:【例3-4】求后序遍历(树的经典题)

【题目描述】 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。 【输入】 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。 【输出】 一行,表示树的后序遍历序列。 【输入样例】 abdec dbeac 【输出样例】 debca 这是一道已知先序和中序,求后序的程序。我将用递归的方法来讲解这一道题。刷到现在,发现做题是一件及其有意思的一件事。我希望把这种快乐传递给更多的人,哈哈哈哈哈。 1.了解先序、中序和后序遍历的访问顺序; 先序遍

qq_39053800的博客 3056

分治法算法学习(一)——归并排序、求最大子数组和

最近在学习算法,看了MOOC上北航童咏昕老师的课后收获很多,这篇文章算是我的学习笔记。 什么是分治法? 这个问题其实很好回答,就是将一个大问题拆解成很多个小问题,依次解决每个小问题,最后整理结果合并为大问题的答案,兵法中这叫逐个击破。 哪些时候适合用分治法? 以分治法的三个步骤为思路,首先这个问题要能被拆解,这点大部分问题都满足,因为问题的复杂性往往和问题的规模正相关。其次是能被拆解为若干个相同的子问题,即具有最优子结构性质。最后也是分治法最关键的特点,即每个子问题的解最终能合并为大问题的解。 分治法框架

gongdamrgao的博客 1352

求后序遍历

输入树的前序序列以及中序序列,将树的后序序列输出

【例3-4】求后序遍历

【题目描述】 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。 【输入】 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。 【输出】 一行,表示树的后序遍历序列。 【输入样例】 abdec dbeac 【输出样例】 debca AC Code: #include<iostream> #in...

一身清贫怎敢入繁华 885

避坑指南:STM32CubeMX配置USB虚拟串口时Heap Size设置的那些坑

本文深入剖析了使用STM32CubeMX配置USB虚拟串口时,因Heap Size设置不当导致设备无法识别的常见问题。文章从故障现象出发,详细解释了堆内存不足如何影响USB枚举过程,并提供了从内存布局分析、动态监控到系统化调试的完整解决方案,帮助开发者从根本上避免这一配置陷阱。

ttt77的博客 599

1339:【例3-4】求后序遍历

输入文件为tree.in,共两行,第一行一个字符串,表示树的先序遍。历,第二行一个字符串,表示树的中序遍历。输出文件为tree.out,仅一行,表示树的后序遍历序列。输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。

青少年趣味编程 297

数据标注的下一代SOP,可能不是Word,而是一段Prompt

再给几个反例:“这个只是正常纹理,不算。真正用于数据生产的Prompt,可能至少包含:任务定义、正例、反例、边界案例、优先级、输出格式、验收逻辑。一个项目100个人,如果100个人对这句话有100种理解,最后返工的就不是一个框,而可能是几十万帧数据。一个项目启动以后,项目经理先研究SOP,培训组长,组长再培训标注员,最后几百个人按照同一套规则干活。实际上一个成熟的项目经理,最重要的能力之一,就是:把客户的业务语言翻译成生产规则。真正让项目难交付的,从来不是80%的普通数据,而是那20%的长尾数据。

AI数据标注猿 296

OpenVINS实战指南:从环境搭建到RGB-D相机实时建图

本文提供了一份详细的OpenVINS实战指南,涵盖从Ubuntu与ROS环境搭建、依赖安装与编译调试,到连接RGB-D相机进行实时建图的完整流程。重点解决了RealSense D435i等设备的驱动配置、话题对齐及常见问题,并分享了传感器标定与性能优化技巧,帮助开发者快速实现稳定高效的视觉惯性里程计系统。

weixin_29201313的博客 485

算法分析课设(四)采用分治法求树中任意两点之间距离小于K的点对及路径

要求: (1)用伪代码描述求树重心的算法。 (2)将下面的树作为输入时,写出求解上述问题的求解过程以及求解结果。要求写出求解过程中主要变量的变化过程。 (3)编写程序求解该问题,并分析算法的时间复杂度。 (1)树的重心,也叫树的质心。即树的一个结点,以它为根的所有子树的最大结点数(相比于以其他点为根的所有子树的最大结点数)最小。 这里是不可能用暴力法去求每个点的子树的最大结点数的。要用到树的点分治法。 ...

Hillbox 6392

新手必看:电路设计里的‘地’到底怎么接?单点、多点、混合接地保姆级图解

本文深入解析电路设计中的接地技术,涵盖单点、多点和混合接地的原理与应用。通过详细的图解和实战案例,帮助新手理解接地在提供参考电位、构成电流回路及抑制电磁干扰中的关键作用,避免常见设计误区,提升电路稳定性与抗干扰能力。

weixin_28455801的博客 300

算法笔记(五)——分治

分治算法字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。归并排序的过程中,元素的下标是会跟着变化的,因此我们需要⼀个辅助数组,来将数组元素和对应的下标绑定在⼀起归并,也就是再归并元素的时候,顺势将下标也转移到对应的位置上。

m0_74317866的博客 1436

RestFul API 详解

RESTful API 经常也被叫做 REST API,它是基于 REST 构建的 API。RESTful API 可以让你看到 URL+Http Method 就知道这个 URL 是干什么的,让你看到了 HTTP 状态码(status code)就知道请求结果如何。

wynn的博客 7584

信号与电源完整性5:轨道塌陷噪声/电源轨道噪声分析及降低解决方案

经过上一节关于串扰的分析,我们已经清楚,噪声问题不仅仅来源于信号网络;电源和地网络所产生的噪声,被反馈到其所在的元器件和信号网络时,其破坏力也是巨大的;本节所讨论的轨道塌陷噪声就是一个典型的实例。在经过电源的地网络的电流发生改变时,在电源和地之间的阻抗上将产生一个压降;由于该压降的产生,用电元件的电压将直接被拉低,甚至可能对电路产生功能性的错误。接下来硬小二将详细的分析电源轨道噪声和降低其的解决方法。...

fydar的博客 2243

二叉树实战笔记:结构、遍历、接口与 OJ 实战

本文聚焦 “二叉树实战”,系统覆盖从基础到应用全流程。先铺垫树的基础概念(节点度、层次等)及特殊二叉树(满、完全二叉树)特性;再用 C++ 模板实现二叉树节点结构体与类,手搓1-2-3/4-5-6示例树,展示内存组织逻辑。 核心解析遍历技术:前中后序递归遍历(根左右 / 左根右 / 左右根)的 “递 - 归” 思想,及层序遍历的队列应用;实战含 LeetCode 题解(单值、相同树、对称树、子树)与常用接口(最大深度、节点总数、k 层节点数、值查找)。

Vect__的博客 1352

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(三)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)A.错误B.正确参考答案:BA.getB.try_getC.peekD.put参考答案:B。

qq_42135020的博客 1917

Leetcode刷题笔记——剑指 Offer 33. 二叉搜索树的后序遍历序列(中等)

文章目录题目描述方法一:递归分治复杂度分析C++代码实现方法二:辅助单调栈 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 注: 1.后序遍历定义: [ 左子树 | 右子树 | 根节点 ] ,即遍历顺序为 “左、右、根” 。 2.二叉搜索树定义: 左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。 方法一:递归分治 终止条件

weixin_39739042的博客 3679

RedCap:一种通信技术的概述

总结起来,RedCap是一种基于数据包交换的通信技术,它提供了一种高效、可靠的数据传输机制。通过使用RedCap,我们可以轻松地发送和接收数据包,并确保数据的完整性和正确性。在上面的示例中,我们首先导入了RedCap库,并创建了一个RedCap实例。然后,我们定义了目标地址和源地址,并创建了一个数据包,其中包含了目标地址、源地址和要发送的数据。本文将介绍RedCap的基本原理和使用方法,并提供一些相关的源代码示例。RedCap还提供了其他一些功能,如数据包的重传机制、流量控制和拥塞控制等。

YgjWeb的博客 900

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

牛客算法第二课——递归分治stl的笔记与总结

牛客算法第二课——递归分治stl的笔记与总结 一:分治 1.1. 概念:当求解某些问题时,由于数据量众多或者过程复杂导致求解过程不易实施。此时,则可将其分解成几个子问题,当求出子问题的解法后,再将其组合成整个问题的解法。(感觉类似于递归的思想,就是一个大问题的解法依赖于一个较小问题,这个较小问题又依赖于更小问题的解法,以次类推,直到小到我们可以直接求解问题) int Fib(in...

m0_47269393的博客 1441

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【算法竞赛学习笔记】基础算法篇:分治

本文介绍了分治算法的核心思想与实现流程。分治通过将大问题拆解为结构相似的小问题(分解),解决基础情况(解决),再合并子问题答案(合并)来解决复杂问题。文章以归并排序为例演示了分治三步流程,并提供了Python实现代码;同时通过多数元素问题展示分治的实际应用,给出详细解题思路和代码实现。最后总结了分治的核心思想、关键步骤和典型应用,强调分治与递归的区别:分治是问题解决思想,递归是实现工具。

YZYZYYNO_2的博客 1091

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

算法笔记——点分治

点分治

m0_67142204的博客 500

算法学习笔记:分治策略

分治策略是一种常用的算法设计技术,适用分治策略设计的算法通常是递归算法。字面上的解释是【分而治之】,就是把一个复杂的问题分成两个或更多的相同的或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序、归并排序)、傅里叶变换(快速傅里叶变化)。分治算法通常以数学归纳法来验证,而它的计算则多数以解递归关系来判定。

m0_64448698的博客 903

【剑指Offer】个人学习笔记_33_二叉搜索树的后序遍历序列

目录题目:[剑指 Offer 33. 二叉搜索树的后序遍历序列](https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/)题目分析初始解答:学习他人:方法一:方法二:方法三:方法四:方法一:递归分治方法二:辅助单调栈总结 刷题日期:19:4420 星期五2021年4月9日 个人刷题记录,代码收集,来源皆为leetcode 经过多方讨论和请教,现在打算往Java方向发力 主要答题语言为Java 题

苏柒的博客 609

LeetCode Java刷题笔记—106. 从中序与后序遍历序列构造二叉树

LeetCode Java刷题笔记—106. 从中序与后序遍历序列构造二叉树

终生学习践行者 428
上一篇: 算法笔记--c++STL
下一篇: 算法笔记--贪心(田忌赛马)
runnerxin
博客等级 码龄10年 12粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值