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

18724 二叉树的遍历运算

### 思路

1. **递归构建树**:
   - 先序遍历的第一个节点是根节点。
   - 在中序遍历中找到根节点的位置,左边部分是左子树,右边部分是右子树。
   - 递归构建左子树和右子树。

2. **递归生成后序遍历**:
   - 递归生成左子树的后序遍历。
   - 递归生成右子树的后序遍历。
   - 根节点放在最后。

### 伪代码

```
function buildTree(preorder, inorder):
    if preorder is empty:
        return null
    root = new TreeNode(preorder[0])
    rootIndex = find root in inorder
    root.left = buildTree(preorder[1:rootIndex+1], inorder[0:rootIndex])
    root.right = buildTree(preorder[rootIndex+1:], inorder[rootIndex+1:])
    return root

function postorderTraversal(root):
    if root is null:
        return ""
    left = postorderTraversal(root.left)
    right = postorderTraversal(root.right)
    return left + right + root.value

preorder = input()
inorder = input()
root = buildTree(preorder, inorder)
postorder = postorderTraversal(root)
print(postorder)
```

### C++代码

#include <iostream>
#include <string>using namespace std;struct TreeNode {char val;TreeNode* left;TreeNode* right;TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};int findIndex(const string& str, char value, int start, int end) {for (int i = start; i <= end; ++i) {if (str[i] == value) {return i;}}return -1;
}TreeNode* buildTree(const string& preorder, int preStart, int preEnd, const string& inorder, int inStart, int inEnd) {if (preStart > preEnd || inStart > inEnd) return NULL;char rootVal = preorder[preStart];TreeNode* root = new TreeNode(rootVal);int inRoot = findIndex(inorder, rootVal, inStart, inEnd);int numsLeft = inRoot - inStart;root->left = buildTree(preorder, preStart + 1, preStart + numsLeft, inorder, inStart, inRoot - 1);root->right = buildTree(preorder, preStart + numsLeft + 1, preEnd, inorder, inRoot + 1, inEnd);return root;
}void postorderTraversal(TreeNode* root, string& postorder) {if (root == NULL) return;postorderTraversal(root->left, postorder);postorderTraversal(root->right, postorder);postorder += root->val;
}int main() {string preorder, inorder;cin >> preorder >> inorder;TreeNode* root = buildTree(preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1);string postorder;postorderTraversal(root, postorder);cout << postorder << endl;return 0;
}

相关文章:

18724 二叉树的遍历运算

### 思路 1. **递归构建树**&#xff1a; - 先序遍历的第一个节点是根节点。 - 在中序遍历中找到根节点的位置&#xff0c;左边部分是左子树&#xff0c;右边部分是右子树。 - 递归构建左子树和右子树。 2. **递归生成后序遍历**&#xff1a; - 递归生成左子树的…...

代理模式简介:静态代理VS与动态代理

代理模式&#xff1a;静态代理VS动态代理 1、定义2、分类2.1 静态代理2.2 动态代理 3、使用场景4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、定义 代理模式是一种设计模式&#xff0c;通过代理对象控制对目标对象的访问。简而…...

使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址

解决方案&#xff1a;使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址 在使用容器化方式注册 XXL-Job 执行器时&#xff0c;由于容器的 IP 地址是动态分配的&#xff0c;可能会导致调度中心无法访问执行器。为了解决这个问题&#xff0c;可以使用 Dockerfile 和…...

Python连接Kafka收发数据等操作

目录 一、Kafka 二、发送端&#xff08;生产者&#xff09; 三、接收端&#xff08;消费者&#xff09; 四、其他操作 一、Kafka Apache Kafka 是一个开源流处理平台&#xff0c;由 LinkedIn 开发&#xff0c;并于 2011 年成为 Apache 软件基金会的一部分。Kafka 广泛用于构…...

MySql在更新操作时引入“两阶段提交”的必要性

日志模块有两个redo log和binlog&#xff0c;redo log 是引擎层的日志&#xff08;负责存储相关的事&#xff09;&#xff0c;binlog是在Server层&#xff0c;主要做MySQL共嗯那个层面的事情。redo log就像一个缓冲区&#xff0c;可以让当更新操作的时候先放redo log中&#xf…...

充气模块方案——无刷充气泵pcba方案

在方案开发中&#xff0c;充气效率是无刷充气泵PCBA方案开发中的关键问题。一般通过优化电路设计和控制算法&#xff0c;可以实现高效的气体压缩和快速的充气效果。另外&#xff0c;选择合理的电机驱动器和传感器等元器件能够提高打气泵的功率和效率&#xff0c;减少充气时间&a…...

[sql-03] 求阅读至少两章的人数

准备数据 CREATE TABLE book_read (bookid varchar(150) NOT NULL COMMENT 书籍ID,username varchar(150) DEFAULT NULL COMMENT 用户名,seq varchar(150) comment 章节ID ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT 用户阅读表insert into book_read values(《太子日子》…...

Linux如何通过链接下载文件

在Linux系统中&#xff0c;你可以通过多种方式通过链接下载文件。这些方式包括使用命令行工具&#xff08;如wget、curl、axel等&#xff09;和图形界面程序&#xff08;如浏览器或文件管理器&#xff09;。以下是几种常用的命令行方法&#xff1a; 1. 使用wget wget是一个非交…...

seL4 IPC(五)

官网链接&#xff1a;link 求解 代码中的很多方法例如这一个教程里面的seL4_GetMR(0)&#xff0c;我在官方给的手册和API中都搜不到&#xff0c;想问一下大家这些大家都是在哪里搜的&#xff01;&#xff01; IPC seL4中的IPC和一般OS中讲的IPC概念相差比较大&#xff0c;根…...

【Java】多线程基础操作

多线程基础操作 Thread类回顾Thread类观察线程运行线程的休眠常用方法构造方法属性获取方法 中断线程线程状态线程等待 初识synchronized问题引入初步使用初步了解可重入锁死锁 volatile问题引入初步使用volatile 与 synchronized 线程顺序控制初步了解wait()notify()防止线程饿…...

基于Hive和Hadoop的病例分析系统

本项目是一个基于大数据技术的医疗病历分析系统&#xff0c;旨在为用户提供全面的病历信息和深入的医疗数据分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…...

数据结构编程实践20讲(Python版)—03栈

本文目录 03 栈 StackS1 说明S2 示例基于列表的实现基于链表的实现 S3 问题&#xff1a;复杂嵌套结构的括号匹配问题求解思路Python3程序 S4 问题&#xff1a;基于栈的阶乘计算VS递归实现求解思路Python3程序 S5 问题&#xff1a;逆波兰表示法(后缀表达式)求值求解思路Python3程…...

【注册/登录安全分析报告:孔夫子旧书网】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

PMP--二模--解题--141-150

文章目录 14.敏捷--创建敏捷环境--团队构成--混合项目环境&#xff0c;通常是自组织团队&#xff0c;即团队成员自己决定谁做什么&#xff0c;而不是项目经理决定。易混--常见场景--一个新人加入141、 [单选] 在一个混合项目的执行过程中&#xff0c;不得不更换一个开发人员。新…...

我的领域-关怀三次元成长的二次元虚拟陪伴 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…...

个人账号(学校+个人)申请专利过程中遇见的问题

一、请指定一位申请人作为代表人 因为是拿个人账号申请的专利&#xff0c;同时要求学校是第一申请人&#xff0c;所以可以再添加一个第二申请人&#xff0c;然后勾选第二申请人为代表人就可以提交申请了&#xff08;注意&#xff1a;两个申请人只能减免75%&#xff0c;也就是要…...

在ubuntu系统中,如何让其按下物理关机键时,系统不处理,但qt程序能检测到关机键按下的事件,并处理信号

要让 Ubuntu 系统在按下物理关机键时&#xff0c;系统不直接处理该事件&#xff0c;但让你的 Qt 程序能够检测到并处理关机键的按下事件&#xff0c;可以参考以下步骤&#xff1a; 1. 禁用系统对关机键的默认处理 Ubuntu 系统默认会捕获电源键的按下事件并执行关机操作。首先你…...

先进制造aps专题二十六 基于强化学习的人工智能ai生产排程aps模型简介

基于强化学习的人工智能ai生产排程模型简介 人工智能ai能不能做生产排程&#xff1f; 答案是肯定的。 ai的算法分两类&#xff0c;一类是学习&#xff0c;一类是搜索。 而生产排程问题&#xff0c;它是一个搜索问题&#xff0c;本质上&#xff0c;它和下围棋是一样的 我们…...

各领域/行业硬件一览表

专班硬件装备制造agv小车、机械臂、PDA、服务器、大屏、扭矩传感器、温湿度检测仪、粉尘传感器、陀螺仪传感器、3D打印设备、在线质量检测仪器、新能源水表、电表、气表、汽表、服务器、大屏、温度传感器、压力传感器、光照度传感器、RTU医药化工温湿度传感器、压力传感器、流量…...

机器学习-SVM

线性感知机分类 支持向量机 线性感知机&#xff08;Perceptron&#xff09; 感知机是线性二值分类器。 注意&#xff1a;什么是线性&#xff1f;线性分割面就是&#xff0c;就是在分割面中&#xff0c;任意两个的连线也在分割面中&#xff0c;这个分割面&#xff0c;就是线…...

安卓玩机神器:无需Root的“搞机工具箱”全功能解析与实战指南

1. 安卓玩机新选择&#xff1a;搞机工具箱为何成为神器&#xff1f; 最近在折腾安卓手机时&#xff0c;发现了一个宝藏工具——搞机工具箱。作为一个长期和安卓系统打交道的玩家&#xff0c;我试过各种需要Root权限的工具&#xff0c;但这款软件最让我惊喜的是它完全不需要Root…...

Pikachu靶场实战:SQL注入漏洞深度解析与防御指南

1. SQL注入漏洞初探&#xff1a;从Pikachu靶场开始 第一次接触SQL注入时&#xff0c;我完全被这种"通过输入框就能控制数据库"的神奇攻击方式震惊了。在Pikachu靶场这个专为Web安全学习设计的实验环境中&#xff0c;我们可以安全地体验各种SQL注入攻击手法。不同于真…...

裂隙注浆模拟:当岩层遇上高粘度浆液

在COMSOL中运用水平集法和蠕动流模块模拟裂隙注浆过程&#xff0c;考虑浆液—岩体的耦合作用。 一般而言&#xff0c;裂隙开度越大&#xff0c;浆液所需注入压力越小。 本算例从结果来看可以验证此定律。 裂隙变形的本构取之于已发表的文献。 本算例中&#xff0c;初始时刻裂隙…...

雨课堂运动与健康网课高效学习指南

1. 雨课堂运动与健康网课学习资源整合 第一次接触雨课堂的运动与健康网课时&#xff0c;我和很多同学一样手忙脚乱。平台上的资料分散在各个角落&#xff0c;视频、文档、测试题混在一起&#xff0c;根本不知道从哪里开始。后来摸索出一套资源整理方法&#xff0c;效率直接翻倍…...

TurboDiffusion应用场景探索:电商、教育、社交,AI视频如何赋能各行各业

TurboDiffusion应用场景探索&#xff1a;电商、教育、社交&#xff0c;AI视频如何赋能各行各业 1. 引言&#xff1a;AI视频生成的新纪元 想象一下这样的场景&#xff1a;早上9点&#xff0c;电商运营团队需要为100款新产品制作展示视频&#xff1b;下午2点&#xff0c;在线教…...

RustFS集群部署避坑指南:我用Ansible踩过的3个坑及解决方案

RustFS集群部署实战&#xff1a;Ansible自动化中的三大典型问题与深度解决方案 当你在凌晨三点收到集群告警通知时&#xff0c;会不会希望当初的部署方案能更健壮些&#xff1f;作为经历过数十次生产环境部署的老兵&#xff0c;我想分享那些官方文档不会告诉你的实战经验。本文…...

从逻辑门到CPU:计算机工作原理详解

戏说CPU的工作原理&#xff1a;从逻辑门到计算系统1. 计算系统的基本构建单元1.1 逻辑门的物理实现计算系统最基本的构建单元是逻辑门&#xff0c;它们可以通过简单的物理实体来演示。以三名士兵为例&#xff0c;我们可以构建最基本的逻辑运算单元&#xff1a;输入单元&#xf…...

MD_DS3231库:工业级DS3231 RTC全功能驱动设计与实践

1. MD_DS3231库深度解析&#xff1a;面向工业级RTC应用的DS3231全功能驱动设计与工程实践DS3231是Maxim&#xff08;现属Analog Devices&#xff09;推出的高精度IC实时时钟芯片&#xff0c;其2ppm温漂特性、内置温度补偿晶振&#xff08;TCXO&#xff09;、独立电池供电备份、…...

单片机开发三大软件架构对比与实践

单片机开发常用软件架构深度解析1. 项目概述在嵌入式系统开发中&#xff0c;软件架构设计直接影响系统的可靠性、可维护性和实时性。本文系统分析三种主流单片机软件架构方案&#xff0c;包括时间片轮询法、操作系统方案和前后台顺序执行法&#xff0c;为开发者提供架构选型参考…...

如何智能检测微信单向好友?WechatRealFriends全方位解决方案

如何智能检测微信单向好友&#xff1f;WechatRealFriends全方位解决方案 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFrien…...