1020 Tree Traversals (25 分) 后序和中序构建树

2023-11-28 13:38

本文主要是介绍1020 Tree Traversals (25 分) 后序和中序构建树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路

  1. 后序和中序构造二叉树
  2. 唯一一个注意的地方,在注释中。
  3. CSDN真垃圾,c++没高亮,还要写成c
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;const int MAXN=10005;
int n=0;
int postorder[MAXN],inorder[MAXN];struct Node{int val=-1;Node*left=NULL,*right=NULL;Node(int val_=0):val(val_){}
};int findPos(int val,int left,int right){for(int i=left;i<=right;i++){if(val==inorder[i]){return i;}}return -1;
}Node* makeTree(int pos,int pos_inl,int pos_inr){if(pos_inl>pos_inr){return NULL;}Node *node=NULL;node=new Node(postorder[pos]);int pos_in_inorder=findPos(postorder[pos],pos_inl,pos_inr);int right_num=pos_inr-pos_in_inorder;// 注意这里是pos-right_num-1而不是想当然的pos_inr-1,这两个的位置并不一定对应node->left=makeTree(pos-right_num-1,pos_inl,pos_in_inorder-1);node->right=makeTree(pos-1,pos_in_inorder+1,pos_inr);return node;
}vector<int>res;
void levelSearch(Node*root){if(root==NULL){return;}queue<Node*>q;q.push(root);while(!q.empty()){Node* top=q.front();q.pop();res.push_back(top->val);if(top->left){q.push(top->left);}if(top->right){q.push(top->right);}}
}
int main(){cin>>n;for(int i=0;i<n;i++){scanf("%d",&postorder[i]);}for(int i=0;i<n;i++){scanf("%d",&inorder[i]);}Node* root=NULL;root=makeTree(n-1,0,n-1);levelSearch(root);
//    cout<<"size: "<<res.size()<<endl;for(int i=0;i<res.size();i++){if(!i){printf("%d",res[i]);}else{printf(" %d",res[i]);}}printf("\n");return 0;
}

这篇关于1020 Tree Traversals (25 分) 后序和中序构建树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429791

相关文章

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处