当前位置: 首页 > news >正文

树的遍历(一题直接理解中序、后序、层序遍历,以及树的存储)

题目如下:

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

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

输入格式

第一行包含整数 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,2,3,4,5,6,7)

后序遍历:遵循规则左右根(2,3,1,5,7,6,4)

如题,它的树长这样:

可以得知,后序遍历最后一个位置即为该树的根结点,找到中序遍历中根结点位置,即可判断出左子树与右子树结点个数,即 4 为根结点值,在中序遍历中其前面与后面各有 3 个节点,因此     1,2,3为左子树各结点值,5,6,7为右结点各结点值,再递归到左子树与右子树重复该操作,即可得到该树的结构

代码如下:

        

#include <iostream>
#include <vector>
#include <queue>
using namespace std;const int N = 35;//定义树结构
typedef struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int value) : val(value), left(nullptr), right(nullptr) {} //构造函数
}TreeNode;//建立树结构
TreeNode* BuildTree(vector<int>& postorder, vector<int>& inorder, int postEnd, int inStart, int inEnd) {if(postEnd <= 0 || inStart >= inEnd)return nullptr;//找到根节点,并开辟空间int rootval = postorder[postEnd];TreeNode* root = new TreeNode(rootval);//找到该根节点在中序遍历中的位置int rootIndexInInOrder = 0;for(rootIndexInInOrder = inStart; rootIndexInInOrder <= inEnd; rootIndexInInOrder++){if(inorder[rootIndexInInOrder] == rootval){break;}}//计算出右子树个数int rightTreeSize = inEnd - rootIndexInInOrder;//递归左右子树root->right = BuildTree(postorder, inorder, postEnd - 1, rootIndexInInOrder + 1, inEnd);root->left = BuildTree(postorder, inorder, postEnd - 1 - rightTreeSize, inStart, rootIndexInInOrder - 1);return  root;
}//树的层序遍历
vector<int> GetLevelOrderVal(TreeNode* root){vector<int> res;if(!root)    return res;queue<TreeNode*> q;q.push(root);while(!q.empty()){auto node = q.front();q.pop();res.push_back(node->val);if(node->left)      q.push(node->left);if(node->right)     q.push(node->right);}return res;
}int main(){vector<int> postorder(N);vector<int> inorder(N);int n = 0;cin >> n;for(int i = 0; i < n; i++)      cin >> postorder[i];for(int i = 0; i < n; i++)      cin >> inorder[i];TreeNode* root = BuildTree(postorder, inorder, n - 1, 0, n - 1);vector<int> res = GetLevelOrderVal(root);for(auto& val : res)cout << val << " ";cout << endl;return 0;
}

相关文章:

树的遍历(一题直接理解中序、后序、层序遍历,以及树的存储)

题目如下&#xff1a; 一个二叉树&#xff0c;树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历&#xff0c;请你输出它的层序遍历。 输入格式 第一行包含整数 N&#xff0c;表示二叉树的节点数。 第二行包含 N 个整数&#xff0c;表示二叉树的后序遍历。 第…...

JVM系统优化实践(22):GC生产环境案例(五)

您好&#xff0c;这里是「码农镖局」CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 除了Tomcat、Jetty&#xff0c;另一个常见的可能出现OOM的地方就是微服务架构下的一次RPC调用过程中。笔者曾经经历过的一次OOM就是基于Thrift框架封装出来的一个RPC框架导…...

DevOps系列文章 之GitLabCI模板库的流水线

目录结构&#xff0c;jobs目录用于存放作业模板。templates目录用于存放流水线模板。这次使用​​default-pipeline.yml​​作为所有作业的基础模板。 作业模板 作业分为Build、test、codeanalysis、artifactory、deploy部分&#xff0c;在每个作业中配置了rules功能开关&…...

spring扩展点ApplicationContextAware解释

ApplicationContextAware是Spring框架中的一个扩展接口&#xff0c;用于获取和操作应用程序上下文&#xff08;ApplicationContext&#xff09;。通过实现ApplicationContextAware接口&#xff0c;可以在Bean中获取对应用程序上下文的引用&#xff0c;并进行进一步的操作。 具…...

力扣热门100题之最大子数组和【中等】【动态规划】

题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&a…...

导出为PDF加封面且分页处理dom元素分割

文章目录 正常展示页面导出后效果代码 正常展示页面 导出后效果 代码 组件内 <template><div><div><div class"content" id"content" style"padding: 0px 20px"><div class"item"><divstyle"…...

【C++入门】浅谈类、对象和 this 指针

文章目录 一、前言二、类1. 基本概念2. 类的封装3. 使用习惯成员函数定义习惯成员变量命名习惯 三、对象1. 基本概念2. 类对象的存储规则 四、this 指针1. 基本概念2. 注意事项3. 经典习题4. 常见面试题 一、前言 在 C 语言中&#xff0c;我们用结构体来描述一个事物的多种属性…...

【Linux命令200例】indent对C语言代码进行缩进和格式化

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…...

Hive 调优集锦(1)

一、前言 1.1 概念 Hive 依赖于 HDFS 存储数据&#xff0c;Hive 将 HQL 转换成 MapReduce 执行&#xff0c;所以说 Hive 是基于Hadoop 的一个数据仓库工具&#xff0c;实质就是一款基于 HDFS 的 MapReduce 计算框架&#xff0c;对存储在HDFS 中的数据进行分析和管理。 1.2 架…...

【C++详解】——智能指针

目录 为什么需要智能指针 抛异常引发内存泄漏 内存泄漏 什么是内存泄漏&#xff0c;内存泄漏的危害 内存泄漏分类 检测内存泄漏常用工具 如何避免内存泄漏 智能指针的使用及原理 RAII 智能指针的原理 各类智能指针介绍 auto_ptr unique_ptr shared_ptr weak_ptr …...

Jmeter接口/性能测试,Jmeter使用教程(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、线程组 线程组…...

59,综合案例-演讲比赛流程管理系统

演讲比赛流程管理系统 59.1案例描述59.1.1比赛规则59.1.2程序功能 59.2创建管理类59.3菜单功能59.3.1添加成员函数59.3.2菜单功能实现 59.4退出功能59.4.1提供功能接口59.4.2实现退出功能 59.5演讲比赛功能59.5.1创建选手类59.5.2比赛59.5.2.1成员属性添加59.5.2.2初始化属性59…...

前端JS 展示上传图片缩略图(本地图片读取)

需求&#xff1a; 点击上传图片按钮&#xff0c;选择图片以后&#xff0c;不请求后端接口&#xff0c;直接将图片展示在缩略图中。 解决方案&#xff1a; 使用 FileReader 和 FileReader 中的 readAsDataURL 方法。 第一步 从input[type“file”] (上传文件标签) 里面拿到fil…...

Vue中$route和$router的区别

$router&#xff1a;用来操作路由&#xff0c;$route&#xff1a;用来获取路由信息 $router其实就是VueRouer的实例&#xff0c;对象包括了vue-router使用的实例方法&#xff0c;还有实例属性&#xff0c;我们可以理解为$router有一个设置的含义&#xff0c;比如设置当前的跳转…...

基于多任务学习卷积神经网络的皮肤损伤联合分割与分类

文章目录 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network摘要本文方法实验结果 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network 摘要 在…...

串口环形缓冲区

文章目录 一、串口环形缓冲区概念二、STC12例程&#xff08;1&#xff09;环形串口缓冲区结构体&#xff08;2&#xff09;串口环形缓冲区存和取数据&#xff08;3&#xff09;完整工程demo 一、串口环形缓冲区概念 串口环形缓冲区应用于嵌入式、物联网开发中处理接收串口数据…...

【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio完成简易通讯录

目录 &#x1f506;Cloud Studio 简介 操作步骤 1.登录 2.创建工作空间 3.初始界面 4.开发空间 5.保存自定义模板 &#x1f506;简易通讯录 1.实验要求 2.操作环境 3.源代码介绍 3.1 定义通讯录类 3.2 定义通讯录列表 3.3 添加联系人功能 3.4 修改联系人 3.5 …...

【技术积累】Vue.js中的核心知识

Vue的生命周期 Vue中的生命周期是指组件从创建到销毁的整个过程中&#xff0c;会触发一系列的钩子函数 Vue2中的生命周期 Vue2中的生命周期钩子函数是在组件的不同阶段执行的特定函数。这些钩子函数允许开发者在组件的不同生命周期阶段执行自定义的逻辑。 Vue2中的生命周期钩…...

flutter开发实战-显示本地图片网络图片及缓存目录图片

flutter开发实战-显示本地图片网络图片及缓存目录图片 在最近开发中碰到了需要显示缓存目录图片&#xff0c;这里顺便整理一下&#xff0c;显示本地图片、网络图片、缓存目录图片的方法。 一、工程本地图片显示 1 在项目根目录下创建名为 images文件夹&#xff0c;也可以将i…...

面对未来的算法备案法规:企业需要做哪些准备?

在信息时代&#xff0c;算法已经成为我们生活的一部分&#xff0c;涵盖了诸如搜索引擎、社交媒体、电子商务、广告投放等各个方面。然而&#xff0c;随着算法的广泛应用&#xff0c;其带来的问题也日益凸显。这引发了全球范围内的关注&#xff0c;未来的算法备案法规正在酝酿之…...

GPT-SoVITS语音克隆技术深度解析:从原理到实战的完整指南

GPT-SoVITS语音克隆技术深度解析&#xff1a;从原理到实战的完整指南 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS 你是否曾幻想过&#xff0c;只需短短几秒钟的录音&#xff0c;就能让AI完美模仿任何人的声音&#xff1…...

告别手动收集!用OWASP Amass自动化你的子域名侦察(附Kali/Windows/Mac安装配置)

从手工到自动化&#xff1a;OWASP Amass在子域名侦察中的高效实践 在网络安全领域&#xff0c;信息收集的质量和效率直接影响着后续渗透测试的成败。传统的手工子域名收集方式——在多个搜索引擎间切换、查询证书透明度日志、翻阅WHOIS记录——不仅耗时耗力&#xff0c;还容易…...

香橙派Ubuntu镜像烧录与系统迁移实战指南

1. 香橙派与Ubuntu镜像的完美组合 香橙派作为国产开源硬件中的佼佼者&#xff0c;凭借其出色的性价比和丰富的接口&#xff0c;已经成为很多开发者和创客的首选。而Ubuntu作为最受欢迎的Linux发行版之一&#xff0c;以其稳定性和易用性赢得了大量用户的青睐。将这两者结合起来&…...

探索NRBO–CNN–LSTM–Attention在多输入单输出回归预测中的应用

NRBO–CNN–LSTM–Attention&#xff0c;多输入单输出回归预测。 &#xff0c;牛顿-拉夫逊优化算法(Newton-Raphson-based optimizer, NRBO)是一种新型的元启发式算法&#xff08;智能优化算法&#xff09;&#xff0c;该成果由Sowmya等人于2024年2月发表在中科院2区Top SCI期刊…...

Gemini 3.1 Pro官网架构革新解析:MoE稀疏性、多模态统一表示与技术实现

对于追求前沿AI模型底层逻辑的研究者与工程师而言&#xff0c;2026年Google发布的Gemini 3.1 Pro不仅仅是一次性能迭代&#xff0c;更是在混合专家系统稀疏性、原生多模态统一表示及动态计算分配等核心架构上的一次深度演进。 要零门槛、高自由度地探究其技术本质&#xff0c;…...

Minikube国内环境配置全攻略:从安装到Dashboard镜像加速(含阿里云镜像源)

Minikube国内环境高效配置指南&#xff1a;从零搭建到Dashboard可视化 对于国内开发者而言&#xff0c;在本地环境中快速搭建Kubernetes学习平台往往面临镜像拉取缓慢甚至失败的困扰。本文将系统性地介绍如何利用Minikube在国内网络环境下构建稳定的单机Kubernetes环境&#xf…...

Spring WebFlux + Reactivate-Feign实战:如何用响应式编程提升微服务性能

Spring WebFlux Reactivate-Feign实战&#xff1a;构建高性能响应式微服务架构 在当今高并发、低延迟的应用场景中&#xff0c;传统同步阻塞式的微服务调用方式逐渐暴露出性能瓶颈。当系统面临突发流量时&#xff0c;线程资源迅速耗尽&#xff0c;响应时间急剧上升&#xff0c…...

ComfyUI DWPose预处理器GPU加速终极指南:三步解决ONNX运行时故障

ComfyUI DWPose预处理器GPU加速终极指南&#xff1a;三步解决ONNX运行时故障 【免费下载链接】comfyui_controlnet_aux 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 在ComfyUI生态系统中&#xff0c;DWPose预处理器作为姿态估计的核心组件&am…...

保障AI安全:YOLOv12模型鲁棒性测试与对抗样本防御

保障AI安全&#xff1a;YOLOv12模型鲁棒性测试与对抗样本防御 在智能安防、自动驾驶这些关键领域&#xff0c;AI模型&#xff0c;尤其是像YOLOv12这样的目标检测模型&#xff0c;已经成为了核心的“眼睛”。我们依赖它来识别行人、车辆&#xff0c;做出至关重要的判断。但你想…...

SmallThinker-3B-Preview惊艳效果:将模糊产品需求转化为PRD+技术方案+风险提示

SmallThinker-3B-Preview惊艳效果&#xff1a;将模糊产品需求转化为PRD技术方案风险提示 你有没有遇到过这样的情况&#xff1f;产品经理或者老板给你一个模糊的想法&#xff0c;比如“我们做个智能助手吧”&#xff0c;或者“开发一个能自动生成周报的工具”。你听完后一头雾…...