/**
* 剑指 Offer 07. 重建二叉树
* @author wsq
* @date 2020/09/11
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof
*/
package notsubmit;
public class RebuildTree {
/**
* 采用递归的方式实现,由于每次递归都需要对原有的数组按照要求复制一部分,浪费了很多的时间和空间
* @param preorder
* @param inorder
* @return
*/
public TreeNode buildTree(int[] preorder, int[] inorder) {
int val = preorder[0];
int leftNum = getIndex(inorder, val);
int rightNum = preorder.length - leftNum - 1;
TreeNode node = new TreeNode(val);
if(leftNum != 0) {
// 需要优化,改为数组索引的形式
int[] leftPreorder = new int[leftNum];
System.arraycopy(preorder, 1, leftPreorder, 0, leftNum);
int[] leftInorder = new int[leftNum];
System.arraycopy(inorder, 0, leftInorder, 0, leftNum);
node.left = buildTree(leftPreorder, leftInorder);
}
if(rightNum != 0) {
int[] rightPreorder = new int[rightNum];
System.arraycopy(preorder, leftNum + 1, rightPreorder, 0, rightNum);
int[] rightInorder = new int[rightNum];
System.arraycopy(inorder, leftNum + 1, rightInorder, 0, rightNum);
node.right = buildTree(rightPreorder, rightInorder);
}
return node;
}
public int getIndex(int[] arr, int val) {
int ans = 0;
for(int i = 0; i < arr.length; ++i) {
if(arr[i] == val) {
ans = i;
break;
}
}
return ans;
}
public static void main(String[] args) {
int[] preorder = {3,9,20,15,7};
int[] inorder = {9,3,15,20,7};
RebuildTree rt = new RebuildTree();
TreeNode ndoe = rt.buildTree(preorder, inorder);
}
}
相关推荐
告别手动点鼠标:用Python脚本批量跑ADS版图仿真,效率提升10倍(附完整代码)
本文详细介绍了如何利用Python脚本自动化ADS版图仿真流程,显著提升射频工程师的工作效率。通过调用ADS底层接口,实现参数化修改、批量任务调度和结果自动收集,解决了手动操作中的常见问题,如仿真不更新等。附完整代码,帮助开发者快速实现10倍效率提升。
【剑指offer07】【C++】重建二叉树
【剑指offer07】【C++】重建二叉树题目题解 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 限制: 0 <= 节点个数 <= 5000 题解 笔记: 递归思想,最
如何用谷歌插件Apollo.io高效开发客户?手把手教你避开常见坑点
本文详细介绍了如何利用谷歌插件Apollo.io高效开发外贸客户,包括核心功能解析、免费额度最大化利用策略、多插件协同技巧以及常见陷阱规避方法。通过Apollo.io的智能匹配算法和庞大数据库,外贸从业者可以精准锁定目标客户,提升开发效率。
剑指 Offer 07. 重建二叉树 javaScript解决
剑指 Offer 07. 重建二叉树问题描述代码注意事项 问题描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / 9 20 / 15 7 代码 var buildTree = function(preorder, inorder) { if( !preorder.len
暗月项目七详解
本文围绕“暗月靶场项目七”展开,记录了一次从外网 Web 入口逐步深入内网并最终获取域控目标的完整实训过程。
5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO怎么选?
本文深度对比了GelSight、DIGIT、Taxim、GelSlim和TACTO五种主流触觉传感器的技术原理与应用场景。针对机器人及VR项目的选型需求,文章从光学与电子传感的技术分野出发,分析了各传感器在分辨率、响应速度、集成难度和成本上的核心差异,并提供了从需求出发的实战选型决策框架,帮助开发者找到最适合的触觉解决方案。
剑指Offer07.重建二叉树 c++
剑指Offer07.重建二叉树 写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点 1.递归和hashmap 1 递归和hashmap class Solution { private: unordered_map<int, int> index; public: TreeNode* myBuildTree(const vector<int>& preorder, const vector<int>&
AXI Timer IP核使用说明
AXI Timer是提供定时技术功能的集成IP核,具有时间生成、事件捕获、产生PWM波以及产生中断的功能,下面具体讲述Timer IP核的使用说明。
LeetCode 之 剑指 Offer 07. 重建二叉树(Java)
LeetCode 之 剑指 Offer 07. 重建二叉树(Java),输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。本文简单描述解题思路,如何重新划分前序遍历和中序遍历的二叉树根节点、左右子树,并提供实现代码。
C语言入门系列:指针入门(超详细)
指针与内存是息息相关的,在学习指针之前,先回忆下内存相关的知识。内存是程序运行期间存储数据的硬件设备,为了方便管理,计算机将内存划分为一个个小的单元,每个单元的大小是一个字节。如果把内存比作一栋酒店大楼,内存单元就像是一个个小的房间,数据就住在小房间里。我们知道,为了客人能准确找到属于自己的房间,酒店房间是有房号的。同样,内存单元也是有编号的,这个编号在计算机中称之为“内存地址。
uniapp - 热更新提示:WGT安装包中manifest.json文件不存在 | unexpected EOF!报错详细解决,完美搞定WGT安装包中WWW目录下manifest.json不存在问题
uniapp,安卓android,苹果ios,热更新,热更新code:-1202报错,,WGT热更新报错,uniapp热更新wgt出现报错manifest.json文件不存,uniapp安卓苹果软件热更新时出现错误unexpected EOF!如何解决,怎么解决热更新wgt报错,app新版本下载安装报错WGT安装包中manifest.json文件不存在,WGT安装包中WWW目录下manifest.json不存在,uniapp热更新报错安装失败[-1201]:WGT/WGTU文件格式错误,uniapp-wgt
剑指 Offer 07. 重建二叉树(递归)
剑指 Offer 07. 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / 9 20 / 15 7 题解:用递归找中序的位置。 /** * Definition for a binary tree node. * struct TreeNode { *
CentOS7安装OpenSSL1.1.1s
CentOS7安装OpenSSL1.1.1s
【leetcode】【medium】剑指 Offer 07. 重建二叉树
剑指 Offer 07. 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder =[3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 限制: 0 <= 节点个数 <= 5000 注意:本题与主站 105 题重复:https://le.
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
剑指offer 07. 重建二叉树
剑指offer 07. 重建二叉树 题目描述 解题思路 细节: 在中序遍历中对根节点进行定位时,一种简单的方法是直接扫描整个中序遍历的结果并找出根节点,但这样做的时间复杂度较高。我们可以考虑使用哈希表来帮助我们快速地定位根节点。 对于哈希映射中的每个键值对,键表示一个元素(节点的值),值表示其在中序遍历中的出现位置。在构造二叉树的过程之前,我们可以对中序遍历的列表进行一遍扫描,就可以构造出这个哈希映射。在此后构造二叉树的过程中,我们就只需要 O(1)的时间对根节点进行定位了。 /** * Definit
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
算法练习- LeetCode 剑指 Offer 07. 重建二叉树
算法练习- LeetCode 剑指 Offer 07. 重建二叉树
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
剑指 Offer 07. 重建二叉树(中等)
剑指 Offer 07. 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder =[3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 限制: 0 <= 节点个数 <= 5000 我的Java代码: 思路:给的函数接口直接...
剑指 Offer 07.重建二叉树
剑指 Offer 07.重建二叉树 知识点: 前序遍历列表:第一个元素永远是 【根节点 (root)】 中序遍历列表:根节点 (root)【左边】的所有元素都在根节点的【左分支】,【右边】的所有元素都在根节点的【右分支】 算法思路: 通过【前序遍历列表】确定【根节点 (root)】 将【中序遍历列表】的节点分割成【左分支节点】和【右分支节点】 递归寻找【左分支节点】中的【根节点 (left child)】和 【右分支节点】中的【根节点 (right child)】 class Solution {
【剑指Offer】个人学习笔记_ 07_重建二叉树
【剑指Offer】个人学习笔记_ 07_重建二叉树 目录【剑指Offer】个人学习笔记_ [07_重建二叉树](https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/)题目:[剑指 Offer 07. 重建二叉树](https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/)初始解答:学习他人:方法一:方法二:方法三:总结 刷题日期:20:4827 星期一2021年3月15日 个
剑指offer07.重建二叉树
剑指offer07.重建二叉树 一、题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 限制: 0 <= 节点个数 <= 5000 二、题目分析 前序遍历特点:节点按照[根节点 | 左子树
剑指 Offer 07. 重建二叉树+递归+图解+易于理解
剑指 Offer 07. 重建二叉树 题干:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 分析: class Solution { public: // 3、递归 TreeNode *helper(vector<int>& preorder, int pre_start,
332



被折叠的 条评论
为什么被折叠?



