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

给定两个整数数组 preorderinorder ,其中 preorder 是二叉树的先序遍历inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:

img

输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]

示例 2:

输入: preorder = [-1], inorder = [-1]
输出: [-1]

代码如下:

class Solution {
public:unordered_map<int,int> index;//定义一个哈希表,存放中序遍历的节点值对应的下标TreeNode* myBuildTree(vector<int>& preorder,vector<int>& inorder,int preleft,int preright,int inleft,int inright)//定义中序遍历与前序遍历的下标{if(preleft>preright||inleft>inright){return nullptr;}int preroot=preleft;//前序遍历中的第一个节点就是根节点int inroot=index[preorder[preroot]];//在中序遍历中定义根节点TreeNode* root=new TreeNode(preorder[preroot]);//创建二叉树的根节点int leftsize=inroot-inleft;//计算左子树中的节点数//递归的进行左子树,连接到根节点//在先序遍历中,左子树preleft+1到preleft+leftsize对应中序遍历中inleft到inroot-1root->left=myBuildTree(preorder,inorder,preleft+1,preleft+leftsize,inleft,inroot-1);//递归的进行右子树//在先序遍历中,右子树preleft+leftsize+1到preright对应中序遍历中inroot+1到inrightroot->right=myBuildTree(preorder,inorder,preleft+leftsize+1,preright,inroot+1,inright);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int n=preorder.size();for(int i=0;i<n;i++){index[inorder[i]]=i;}return myBuildTree(preorder,inorder,0,n-1,0,n-1);}
};

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

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

相关文章

混淆矩阵和数据不平衡 (1/3)

一、说明 如果数据集数据不平恒&#xff0c;如何评估分类器的效果&#xff1f;如果分类器不好&#xff0c;如何改进分类器&#xff1f;本篇将讲述不平衡数据下&#xff0c;混淆矩阵的应用。 二、混淆矩阵的基本概念 2.1 连续数据分布 LET将数据视为连续的&#xff0c;分类的或有…

http概念

概念&#xff1a;HTTP&#xff0c;hyper text transfer protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点&#xff1a; 1.基于TCP协议&#xff1a;面向连接&#xff0c;安全。 2.基于请求-响应模型的&#xff1a;一次请求对应一…

哈希及哈希表的实现

目录 一、哈希的引入 二、概念 三、哈希冲突 四、哈希函数 常见的哈希函数 1、直接定址法 2、除留余数法 五、哈希冲突的解决 1、闭散列 2、开散列 一、哈希的引入 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找…

IDEA clion + vim =neovim

Jetbrains IDE vim 插件 ‘good’*5;

【百问百答】可靠性基础知识第八期

1、什么是加速度频谱密度值(ASD) ? 表示随机信号的各个频率分量所包的加速度方均值在频域上是如何分布的。通常用ASD表示。 2、什么是功率频谱密度值(PSD) ? 表示随机信号的各个频率分量所包的功率在频域上是怎样分布的。通常用PSD表示&#xff0c;单位&#xff1a;g2/Hz。 0…

数据结构-时间复杂度/空间复杂度

Hello&#xff0c;好久没有更新了哦&#xff0c;已经开始学习数据结构了&#xff0c;这篇文章呢就是对刚学数据结构所接触到的时间复杂度进行一个分享哦&#xff0c;如果有错误之处&#xff0c;大家记得拍拍我哦~ 既然要讨论时间/空间复杂度&#xff0c;那我们就得知道时间/空…

9.18号作业

完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按钮…

【随想】每日两题Day.7

题目&#xff1a;面试题 02.07.链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 …

Ardupilot — EKF3使用光流室内定位代码梳理

文章目录 前言 1 Copter.cpp 1.1 void IRAM_ATTR Copter::fast_loop() 1.2 void Copter::read_AHRS(void) 1.3 对象ahrs说明 2 AP_AHRS_NavEKF.cpp 2.1 void AP_AHRS_NavEKF::update(bool skip_ins_update) 2.2 void AP_AHRS_NavEKF::update_EKF3(void) 2.3 对象EKF3说…

002 Linux 权限

前言 本文将会向您介绍关于linux权限方面的内容&#xff0c;包括文件类型&#xff0c;如何切换用户、基本权限、粘滞位等等 Linux具体的用户 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的…

「聊设计模式」之适配器模式(Adapter)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 在软件开发中&#xff0c;经常会涉及到现有系统的改造和升…

1. 快速体验 VSCode 和 CMake 创建 C/C++项目

1. 快速体验 VSCode 和 CMake 创建 C/C项目 本章的全部代码和markdown文件地址: CMake_Tutorial&#xff0c;欢迎互相交流. 此次介绍的内容都是针对于 Linux 操作系统上的开发过程. 1.1 安装开发工具 VSCode: 自行下载安装, 然后安装插件 Cmake:在 Ubuntu 系统上, 可以采用 ap…