【蓝桥集训】第六天——递归

news/2024/4/18 13:12:06/文章来源:https://blog.csdn.net/qq_73659829/article/details/129151156

作者:指针不指南吗
专栏:Acwing 蓝桥集训每日一题

🐾或许会很慢,但是不可以停下来🐾

文章目录

  • 1.树的遍历
  • 2.递归求阶乘
  • 3.求斐波那契数列

1.树的遍历

一个二叉树,树中每个节点的权值互不相同。

现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。

输入格式

第一行包含整数 N,表示二叉树的节点数。

第二行包含 N 个整数,表示二叉树的后序遍历。

第三行包含 N 个整数,表示二叉树的中序遍历。

输出格式

输出一行 N 个整数,表示二叉树的层序遍历。

数据范围

1≤N≤30,
官方并未给出各节点权值的取值范围,为方便起见,在本网站范围取为 1∼N。

输入样例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:

4 1 6 3 5 7 2

  1. 知识点
  • 层序遍历:从上往下,从左往右一层一层遍历;

  • 中序遍历:先遍历左节点,再遍历根节点,最后遍历右节点;

  • 前序遍历:先遍历根节点,再遍历左节点,最后遍历右节点;

  • 后序遍历: 先遍历左节点,再遍历右节点,最后遍历根节点;

  1. 推导树的原型过程

在这里插入图片描述

​ (1) 首先根据后序遍历的最后一个数,来确定根节点,在中序遍历中找到相同的数即根节点;

​ (2) 由根节点在中序遍历中的位置,我们可以推出来,左子树长度,右子树长度,对应的在后序遍历中找到;

​ (3) 再根据后序遍历中左子树的最后一个,即左子树的根节点,…,递归

  • 最后需要层序遍历:

    我们可以先开一个vector,第一层放在 vector[ 0 ] 里面,第二层放在vector[1]里面…

  1. 代码实现

    #include<bits/stdc++.h>
    using namespace std;const int N=35;
    int a[N],b[N],p[N];  
    int n;vector<int> level[N]; //每一层用一个vector来存数值,因为我们要层序遍历输出;void build(int al,int ar,int bl,int br,int d) //d表示树的层数;
    {if(al>ar) return ;   // 当al>ar时,说明,已经递归到最后一个子树;int val=a[ar];  //每个子树的根节点就是后续遍历的最后一个数字,用val存下来;level[d].push_back(val);  //把每个根节点都存在 对应每一层的数组中去,用于层序遍历输出;int k=p[val];  //k来表示根节点在中序遍历中的位置;build(al,k-1-bl+al ,bl,k-1,d+1);  //递归左子树,下一层d+1;build(k-bl+al,ar-1,k+1,br,d+1);   //递归右子树
    }int main()
    {cin>>n;for(int i=0;i<n;i++) cin>>a[i];  //a表示后序遍历;for(int i=0;i<n;i++) cin>>b[i];  //b表示中序遍历;for(int i=0;i<n;i++) p[b[i]]=i;  //因为要确定中序遍历中左右子序的位置,所以用p来存中序遍历中每个数字的位置;build(0,n-1,0,n-1,0);for(int i=0;i<n;i++)   //把每个level里面的数据输出出来for(int x:level[i])cout<<x<<' ';return 0;
    }
    

    补充

    build的函数参数的表示如下图:

    后序遍历中左子树的ar 的计算,列个方程即可,如下图:

2.递归求阶乘

请使用递归的方式求 n 的阶乘。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示 n 的阶乘的值。

数据范围

1≤n≤10

输入样例:

3

输出样例:

6
  • 代码实现

    #include<bits/stdc++.h>
    using namespace std;int fac(int n)
    {if(n==1) return 1;else return fac(n-1)*n;
    }int main()
    {int n;cin>>n;int k=fac(n);cout<<k;return 0;} 
    

3.求斐波那契数列

请使用递归的方式求斐波那契数列的第 n 项,下标从1开始。

斐波那契数列:1,1,2,3,5…这个数列从第 3 项开始,每一项都等于前两项之和

输入格式

共一行,包含整数 n。

输出格式

共一行,包含一个整数,表示斐波那契数列的第 n� 项。

数据范围

1≤n≤30

输入样例:

4

输出样例:

3
  • 代码实现

    #include<bits/stdc++.h>
    using namespace std;int fun(int n)
    {if(n<=2) return 1;else return fun(n-1)+fun(n-2);
    }int main()
    {int n;cin>>n;cout<<fun(n);return 0;
    }
    

虽然跟着y总学习,但是简单题也要回顾
Alt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72236.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能基础部分13-LSTM网络:预测上证指数走势

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下LSTM网络&#xff0c;主要运用于解决序列问题。 一、LSTM网络简单介绍 LSTM又称为&#xff1a;长短期记忆网络&#xff0c;它是一种特殊的 RNN。LSTM网络主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题…

【OpenCV学习笔记01】- 初步使用OpenCV实现人脸识别

想要使用opencv实现人脸识别&#xff0c;我们需要做这样几步&#xff1a; 1.opencv-python的安装 这里我们使用的python的opencv-python库&#xff0c;在安装opencv-python库之前&#xff0c;我们需要安装numpy, matplotlib。 # 安装指令 # 安装 numpy pip install numpy # …

Python 四大主流 Web 编程框架

目前Python的网络编程框架已经多达几十个&#xff0c;逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处&#xff0c;本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架&#xff1a;Django、Tornado、Flask、Twisted。 …

Python os和sys模块

一、os模块 os 模块是 Python中的一个内置模块&#xff0c;也是 Python中整理文件和目录最为常用的模块。 该模块提供了非常丰富的方法用来处理文件和目录。比如&#xff1a;显示当前目录下所有文件/删除某个文件/获取文件大小 1、获取当前的工作路径 在 Python 中&#xff0…

linux查看WWN号及常见问题解决

linux查看WWN号及常见问题解决查看WWN号查看WWID号查询常见问题查看WWN号 要查看CentOS 6.7版本的WWN号&#xff0c;可以执行以下步骤&#xff1a; 1.确保已经连接了存储设备。 lspci | grep -i fibre2.在终端中输入命令&#xff1a;lsscsi&#xff0c;然后按 Enter 键。该命令…

redhawk:GSC file与STA file

1.GSC file redhawk做lowpower分析时需要GSC&#xff08;Global Switching Configuration&#xff09;file指导block/instance/power domain的开关状态。 Syntax&#xff08;in GSR file&#xff09;: GSC_FILES <gsc_FilePathName> Syntax&#xff08;in GSC file&a…

易基因|RRBS单碱基绘制580种动物的基因组规模DNA甲基化谱:Nature子刊

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。2023年01月16日&#xff0c;奥地利科学院分子医学研究中心(CeMM)研究团队在《Nat Commun》杂志发表了题为“Comparative analysis of genome-scale, base-resolution DNA methylation prof…

【Git】Git是什么?简单说说Git的工作机制?Git的常用命令有那些?

目录 一、Git是什么? 二、简单说说Git的工作机制&#xff1f; 三、Git的常用命令有那些&#xff1f; &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f499;一下 一、Git是什么? Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可…

Git push报错DeployKey does not support push code

错误描述用Git从本地仓库上传服务器仓库报错&#xff1a;DeployKey does not support push code错误代码&#xff1a;(通过$ git push origin master命令从本地仓库上传到服务器仓库)错误原因&#xff1a;没有注册ssh公钥解决办法&#xff1a;添加ssh公钥&#xff1a;先生成对应…

C++项目——高并发内存池(3)--central cache整体设计

1.central cache的介绍 1.1框架思想 1.1.1哈希映射 centralcache其实也是哈希桶结构的&#xff0c;并且central cache和thread cacha的哈希映射关系是一致的。目的为了&#xff0c;当thread cache某一个哈希桶下没有内存块时&#xff0c;可以利用之前编写的SizeClass::Index…

RPC编程:RPC概述和架构演变

RPC编程系列文章第一篇一&#xff1a;引言1&#xff1a;本系列文章的目标2&#xff1a;RPC的概念二&#xff1a;架构的演变过程1&#xff1a;单体架构1)&#xff1a;概念2)&#xff1a;特点3)&#xff1a;优缺点2&#xff1a;单体架构水平扩展1)&#xff1a;水平拓展的含义2)&a…

整车电源的几种模式:OFF/ACC/RUN/CRANK

本文框架1.前言2. 四种电源模式2.1 OFF模式2.2 ACC模式2.3 ON模式2.4 CRANK模式3. KL15/KL301.前言 在诊断或者网络管理相关模块开发对客户的需求进行梳理时&#xff0c;经常会看到客户对不同车辆模式下处理策略的需求&#xff0c;如果前期没接触过这几种模式&#xff0c;可能…

【C++】初识CC++内存管理

前言 我们都知道C&C是非常注重性能的语言&#xff0c;因此对于C&C的内存管理是每一个C/C学习者必须重点掌握的内容&#xff0c;本章我们并不是深入讲解C&C内存管理&#xff0c;而是介绍C&C内存管理的基础知识&#xff0c;为我们以后深入理解C&C内存管理做铺…

【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析

如果觉得我的分享有一定帮助&#xff0c;欢迎关注我的微信公众号 “码农的科研笔记”&#xff0c;了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析 【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析 原文&…

Ardiuno-交通灯

LED交通灯实验实验器件&#xff1a;■ 红色LED灯&#xff1a;1 个■ 黄色LED灯&#xff1a;1 个■ 绿色LED灯&#xff1a;1 个■ 220欧电阻&#xff1a;3 个■ 面包板&#xff1a;1 个■ 多彩杜邦线&#xff1a;若干实验连线1.将3个发光二极管插入面包板&#xff0c;2.用杜邦线…

【JUC2022】第二章 多线程锁

【JUC2022】第二章 多线程锁 文章目录【JUC2022】第二章 多线程锁一、乐观锁与悲观锁1.悲观锁2.乐观锁二、八锁案例1.标准情况&#xff0c;有a、b两个线程&#xff0c;请问先打印邮件还是短信【结果&#xff1a;邮件】2.sendEmail方法中加入暂停3秒钟&#xff0c;请问先打印邮件…

华为OD机试 - 最小传递延迟(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

随机数与蒙特卡洛方法及Python实现

0 建议学时 4学时 1 引入 1.1 随机数与采样 客观世界的某些行为&#xff0c;结果具有随机性&#xff1a; 掷骰子、投硬币&#xff1b; 等待公交车的时间&#xff1b; 种子发芽的比例&#xff1b; … 1.2 随机数函数 1.2.1 random模块 Python的random模块中提供了若干生成…

RFID盘点软件为企业提供RFID固定资产管理方案

随着科技的发展&#xff0c;固定资产管理系统也经过了一些变革&#xff0c;从刚开始的单机版逐渐发展成SaaS版本&#xff0c;物联网版本等。从刚开始只支持条形码到支持二维码、RFID码。RFID固定资产管理系统上线后&#xff0c;通过给每个实物资产绑定一个RFID码标签后&#xf…

接口测试流程是怎样的?

接口测试流程是怎样的&#xff1f;总所周知&#xff0c;接口测试流程是怎样的&#xff1f;总所周知接口测试在软件测试中是一个非常重要的一部分&#xff0c;其主要目的是测试应用程序的接口是否能够按照规范要求与其他系统或组件进行交互&#xff0c;以及在不同负载条件下接口…