从中序与后序遍历序列构造二叉树(C++实现)

从中序与后序遍历序列构造二叉树

  • 题目
  • 思路
  • 代码
  • 代码讲解

题目

力扣:从中序与后序遍历序列构造二叉树


在这里插入图片描述

思路

在这里插入图片描述

代码

class Solution {
public:TreeNode* _build(vector<int>& inorder, vector<int>& postorder,int & peri,int lefti,int righti){if(lefti>righti){return nullptr;}int rooti=0;while(rooti<=righti){if(postorder[peri]==inorder[rooti]){break;}rooti++;}//[lefti,rooti-1][rooti][rooti+1,righti]TreeNode * root=new TreeNode(postorder[peri--]);root->right=_build(inorder,postorder,peri,rooti+1,righti);root->left=_build(inorder,postorder,peri,lefti,rooti-1);return root;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder){int i=postorder.size()-1;TreeNode *root=_build(inorder,postorder,i,0,postorder.size()-1);return root;}
};

代码讲解

_build 函数是一个递归函数,用于构建二叉树的子树。它接收中序遍历序列 inorder、后序遍历序列 postorder、一个引用 peri、当前子树的左边界 lefti 和右边界 righti 作为参数。

首先,检查左边界 lefti 是否大于右边界 righti,如果是,说明当前子树为空,返回 nullptr。
在后序遍历序列中,找到当前根节点的值 postorder[peri] 在中序遍历序列中的位置 rooti。
创建一个新的节点 root,值为 postorder[peri–],即后序遍历序列的最后一个元素。
递归地调用 _build 函数构建右子树,传入中序遍历序列 inorder、后序遍历序列 postorder、引用 peri、rooti+1 和 righti 作为参数。
递归地调用 _build 函数构建左子树,传入中序遍历序列 inorder、后序遍历序列 postorder、引用 peri、lefti 和 rooti-1 作为参数。
返回根节点 root。


buildTree 函数是主函数,用于调用 _build 函数构建整棵二叉树。它接收中序遍历序列 inorder 和后序遍历序列 postorder 作为参数。

初始化变量 i 为 postorder 的最后一个索引,即后序遍历序列的最后一个元素。
调用 _build 函数构建二叉树的根节点,传入中序遍历序列 inorder、后序遍历序列 postorder、引用 i、0 和 postorder.size()-1 作为参数。
返回构建的二叉树的根节点 root。

(本题完)

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

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

相关文章

obsidian官网下载太慢

obsidian真的很强大&#xff0c;速度快&#xff0c;丝滑&#xff0c;但是官网很慢 上百度网盘链接&#xff01; 链接&#xff1a;https://pan.baidu.com/s/1CWoNRuyhtezLTTJOfRf9Jg?pwdxopt 提取码&#xff1a;xopt

Linux shell for jar test

Linux shell 脚本&#xff0c;循环解析命令行传入的所有参数&#xff0c;并按照不同的传参实现对不同的 java jar文件 进行测试执行。 [rootlocalhost demo]# cat connTest.sh #!/bin/bash# Linux shell for qftool java jar test# modes DEFAULT_MODE2jarfiles[1]common-1.0…

一觉睡到大天亮,dido P1S智能手环体验

智能穿戴设备对于有关注健康的朋友来说&#xff0c;是非常使用的工具&#xff0c;它们可以帮助我们实时监测一些健康数据&#xff0c;最近几年&#xff0c;国产的智能穿戴设备突飞猛进&#xff0c;大幅拉低了价格门槛&#xff0c;而且使用体验也很不错&#xff0c;现在我用的也…

centos7 keepalived 探测哪个是当前节点

前提 nginx 默认页面内容中需要加上各节点的ip nginx web页面修改 nginx配置文件路径&#xff1a;/etc/nginx/nginx.conf&#xff0c;该配置文件引用了/etc/nginx/conf.d/default.conf 打开/etc/nginx/conf.d/default.conf配置文件可以看到html页面的路径 /usr/share/nginx…

NX二次开发UF_MTX3_copy 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_MTX3_copy Defined in: uf_mtx.h void UF_MTX3_copy(const double mtx_src [ 9 ] , double mtx_dst [ 9 ] ) overview 概述 Copies the matrix elements from a source 3x3 mat…

Matplotlib线形图的创建_Python数据分析与可视化

线形图的创建 绘制线形图设置颜色和风格设置坐标轴上下限设置图形标签 绘制线形图 在所有图形中&#xff0c;最简单的应该就是线性方程y f (x) 的可视化了。来看看如何创建这个简单的线形图。要画Matplotlib图形时&#xff0c;都需要先创建一个图形fig 和一个坐标轴ax。创建图…

aspera传输方案怎么样,需要选择aspera替代方案吗

Aspera传输方案是一种高速、可靠的文件传输解决方案&#xff0c;适用于需要大规模传输大文件或数据集的企业和组织。Aspera采用UDP协议及自己开发的FASP协议进行加速传输&#xff0c;能够在高延迟、高丢包网络环境下实现稳定快速的传输。 Aspera传输方案具有以下优点&#xff1…

lv11 嵌入式开发 UART实验 11

目录 1 UART帧格式详解 1.1 UART简介 1.2 通信基础 - 并行和串行 1.3 通信基础 - 单工和双工 1.4 通信基础 - 波特率 1.5 UART帧格式 2 Exynos4412下的UART控制器 2.1 引脚功能设置 2.2 阅读芯片手册 3 UART寄存器详解 3.1 引脚寄存器 3.2 串口寄存器概览 3.3 ULC…

本地训练,立等可取,30秒音频素材复刻霉霉讲中文音色基于Bert-VITS2V2.0.2

之前我们使用Bert-VITS2V2.0.2版本对现有的原神数据集进行了本地训练&#xff0c;但如果克隆对象脱离了原神角色&#xff0c;我们就需要自己构建数据集了&#xff0c;事实上&#xff0c;深度学习模型的性能和泛化能力都依托于所使用的数据集的质量和多样性&#xff0c;本次我们…

Filebeat 部署

目录 &#xff08;1&#xff09;下载 &#xff08;2&#xff09;解压 &#xff08;3&#xff09;修改配置 &#xff08;4&#xff09;启动 &#xff08;5&#xff09;配置nginx 为什么用 Filebeat &#xff0c;而不用原来的 Logstash 呢&#xff1f; 原因很简单&#xff0c…

工程数学笔记 | 傅里叶级数/变换的本质理解

以下内容纯属个人学习记录&#xff0c;难免有误&#xff0c;欢迎指正~ 摘要 鉴于文章篇幅较长&#xff0c;为了避免浪费读者时间&#xff0c;简单介绍下文章的主要内容。 文章主要针对傅里叶级数/变换这一科学方法的形成逻辑&#xff08;Why→∑/∫→微积分思想&#xff09;和基…

ESP32-Web-Server编程-建立第一个网页

ESP32-Web-Server编程-建立第一个网页 HTTP 简述 可能你每天都要刷几个短视频&#xff0c;打开几个网页来娱乐一番。当你打开一个网络上的视频或者图片时&#xff0c;其实际发生了下面的流程&#xff1a; 其中客户端就是你的浏览器啦&#xff0c;服务器就是远程一个存放视频或…