当前位置: 首页 > 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;就是线…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

21-Oracle 23 ai-Automatic SQL Plan Management(SPM)

小伙伴们&#xff0c;有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL&#xff0c; 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始&#xff0c;OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...