leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal(前序和中序遍历重建二叉树)

基于STM32设计的智能家居控制系统(华为云)_363 本项目设计并实现了一种基于STM32的智能家居控制系统,融合了语音识别、远程控制、环境监测与安全报警等功能。系统以STM32F103C8T6单片机为核心控制器,集成ESP8266 Wi-Fi模块实现与华为云IOT物联网平台的数据交互,采用MQTT协议进行通信。用户可通过语音识别模块控制风扇、空调、窗帘、卧室灯、客厅灯和电视等家电的开关操作,同时也可通过Android手机APP或Windows电脑上位机进行远程控制。系统还具备温湿度、光照强度、烟雾浓度和火焰检测功能,当检测到异常情况时,自动触发蜂鸣器报警并向 阅读详情

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

For example, given

preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
Return the following binary tree:

    3
   / \
  9  20
    /  \
   15   7

给出一个树的前序遍历和中序遍历,让重建这棵树

思路:
前序遍历数组的第一个元素一定是root

中序遍历的顺序是:左子树,root,右子树

根据前序遍历数组我们已经知道了root
根据这个root可以在中序遍历数组中找到root对应的位置rootIdx

几个变量:
前序遍历数组的第一个元素位置记为preStart
中序遍历数组的开始位置和结束位置记为:inStart, inEnd
同时可以知道因为inorder和preorder数组的size是一样的,所以inEnd也代表了preorder数组的结束位置

现在可以知道在中序遍历数组中从inStart到rootIdx-1是左子树,rootIdx+1到inEnd是右子树
同时也可以知道左子树的size是rootIdx - inStart + 1

前序遍历的顺序是:root, 左子树,右子树

现在前序遍历数组中从preStart+1到preStart+左子树size的范围是左子树
而左子树范围的第一个元素是左子树的root,然后再按上述步骤递归左子树范围的数组

同理preorder数组中preStart+左子树size+1到inEnd的范围为右子树的范围,
而右子树范围的第一个元素是右子树的root,然后递归右子树范围的数组

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        if (preorder == null || inorder == null) {
            return null;
        }
        
        return buildTreeHelper(preorder, inorder, 0, 0, inorder.length - 1);
    }
    
    public TreeNode buildTreeHelper(int[] preorder, int[] inorder, int preStart,
                                   int inStart, int inEnd) {
        
        if (preStart >= preorder.length || inStart > inEnd) {
            return null;
        }
        
        int rootIdx = inStart;
        TreeNode root = new TreeNode(preorder[preStart]);
        while (rootIdx < inEnd) {
            if (inorder[rootIdx] == preorder[preStart]) {
                break;
            }
            rootIdx ++;
        }
        
        root.left = buildTreeHelper(preorder, inorder, preStart + 1, inStart, rootIdx - 1);
        root.right = buildTreeHelper(preorder, inorder, preStart + rootIdx - inStart + 1,
                                     rootIdx + 1, inEnd);
        
        return root;
    }

或者

public TreeNode buildTree(int[] preorder, int[] inorder) {
    
    return build(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1);
}

TreeNode build(int[] preorder, int[] inorder, int preS, int preE, int inS, int inE) {
    if(preS > preE || inS > inE) return null;
          
    int rootVal = preorder[preS];
    TreeNode root = new TreeNode(rootVal);
    
    int leftLen = 0;
    for(int i = inS; i < inE; i++) {
        if(inorder[i] == rootVal) break;
        leftLen ++;
    }
    
    root.left = build(preorder, inorder, preS+1, preS+leftLen, inS, inS+leftLen-1);
    root.right = build(preorder, inorder, preS+leftLen+1, preE, inS+leftLen+1, inE);
    
    return root;
}
OceanSim: 基于Isaac Sim GPU 加速水下机器人感知仿真框架 OceanSim 采用先进的基于物理的渲染技术,对水下视觉和声学传感器进行精确建模。与其他模拟引擎相比,OceanSim 的渲染速度要快得多。作为 NVIDIA Issac Sim 的扩展,OceanSim 采用了多功能设计。通过融入快速发展的 NVIDIA Omniverse 生态系统,我们的模拟器自然而然地在机器人学习和水下机器人技术之间架起了一座桥梁,从而促进了水下应用中体现型人工智能技术的开发和部署。OceanSim 将以开放源码的方式提供,使研究界能够以合作的模式作出贡献。 阅读详情

相关推荐

ptrade量化策略之沪深300指数增强

本策略的核心是在沪深300股票池中选股,选择的股票都是市值比较大,业绩比较好的白马股,根据市场相对位置以及基本面因子来选择股票

qq_29301281的博客 1190

7-3 Left-View of Binary Tree (25 分)

7-3 Left-View of Binary Tree (25 分) Theleft-viewof a binary tree is a list of nodes obtained by looking at the tree from left hand side and from top down. For example, given a tree shown by the figure, its left-view is { 1, 2, 3, 4, 5 } Given the ino..

华师少女的梦的博客 335

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

5、优化项(省略此步骤,直接进行步骤6),进入到视图着色方式(此时没有灯光,整体偏暗,如果不调整灯光,烘培出来的材质也偏暗,因此此步骤为优化项,通畅建议调整)。在右边栏进入世界环境,调整颜色。7、烘焙成功之后,新建一个材质,将第三步创建的纹理图像作为材质的纹理,连接到基础色,并把模型的材质改为此材质,其他的材质全部删除。2、处理uv,在侧边栏选择数据-uv贴图,选中使用的uv,进入编辑模式,全选,键盘u,选择智能uv投射。3、处理材质,在侧边栏选择材质,进入着色,在着色器编辑器新建一个图像纹理,新建图像。

AllBluefm的专栏 2529

PAT甲级2023夏季考试题解(A-1 Trap,A-2 Queue Using Two Stacks,A-3 Rank of Binary Tree,A-4 Big Number)

A-1 Trap分数 20作者 陈越单位 浙江大学。

qq_51825761的博客 2054

2022年TI杯模拟电⼦系统设计专题邀请赛——李萨如图形演示装置

本次装置主要是对输入的正弦信号进行频率变换,并将原输入正弦信号作为 X 轴信号、变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。采用 EK-TM4C123GXL 板卡作为主控;频率变换采用“锁向环+计数器”实现 1-5 倍频的频率变换控制;李萨如图形采用两个 AD通道采集原输入的正弦信号作为 X 轴信号和频率变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。

qq_45890466的博客 7766

Project 编制进度计划【项目管理】

Project 项目管理编制进度计划详解。

m0_52861684的博客 5084

leetcode Construct Binary Tree from Preorder and Inorder Traversal题解

题目描述: Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. For example, given preorder =[3,9,20,15,7] inorder...

leo_weile的博客 272

MounRiver Studio实战:像管理个人项目一样整理沁恒MCU的EVT例程(附文件结构图)

本文详细介绍了如何使用MounRiver Studio重构沁恒MCU的EVT例程,实现工程化管理。通过分析官方EVT设计的局限性,提出标准化的目录结构和迁移步骤,帮助开发者提升代码可维护性和团队协作效率。文章还提供了MounRiver Studio的关键配置参数和常见问题排查指南,适用于沁恒MCU开发者。

weixin_33940469的博客 356

2020年PAT甲级秋季考试真题

1172 2020 秋季Panda and PP Milk(20) PP milk (盆盆奶)is Pandas’ favorite. They would line up to enjoy it as show in the picture. On the other hand, they could drink in peace only if they believe that the amount of PP milk is fairly distributed, that is, fatter

qq_40805977的博客 1350

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

jks212454的博客 420

1.5 RAG技术栈全景图:LangChain vs LlamaIndex深度对比,选错框架后悔3年,一文帮你选对

摘要:LangChain与LlamaIndex框架深度对比 本文全面对比了RAG领域两大主流框架LangChain和LlamaIndex。LangChain是通用AI应用框架,具有模块化设计和丰富生态;LlamaIndex专为RAG优化,提供开箱即用解决方案。功能对比显示,LangChain在文档加载和Agent支持方面更强,而LlamaIndex在检索策略、向量存储和多模态处理上表现更优。代码示例展示了二者实现RAG的不同方式:LangChain需要更多配置但灵活性高,LlamaIndex则提供更简洁的A

yonggeit的博客 3238

105. Construct Binary Tree from Preorder and Inorder Traversal

题目描述(中等难度) 根据二叉树的先序遍历和中序遍历还原二叉树。 解法一 递归 先序遍历的顺序是根节点,左子树,右子树。中序遍历的顺序是左子树,根节点,右子树。 所以我们只需要根据先序遍历得到根节点,然后在中序遍历中找到根节点的位置,它的左边就是左子树的节点,右边就是右子树的节点。 生成左子树和右子树就可以递归的进行了。 比如上图的例子,我们来分析一下。 preorder = [3,9,20,15,7] inorder = [9,3,15,20,7] 首先根据 preorder 找到根节点是 3 然后根

猫敷雪 411

Linux系统故障排查思路实践教程(上)

本文主要介绍了Linux系统日志分析与常见故障排查的实用方法。首先从系统日志的分类及其涉及的日志文件进行说明;其次详细讲解了忘记用户密码的解决方案;接着对系统无法启动问题,提供了异常断电后修复文件系统、/etc/fstab文件丢失恢复等常见故障的处理方案。最后介绍了文件系统只读错误的排查思路和修复方法,包括磁盘空间检查、文件系统修复等实用技巧。全文提供了大量具体命令和操作流程,为Linux系统维护人员提供了实用的故障处理指南。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 328

Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal前序,中序遍历序列重建二叉树

Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. For example, given preorder =[3,9,20,15,7] inorder = [9,3...

salmonwilliam的博客 389

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode 105:Construct Binary Tree from Preorder and Inorder Traversal

LeetCode 105: Given preorder and inorder traversal of a tree, construct the binary tree. 给定一个二叉树的前序和中序遍历,重建这棵二叉树。

哈哈的个人专栏 1688

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode105. Construct Binary Tree from Preorder and Inorder Traversal(从前序与中序遍历序列构造二叉树)

前序和中序遍历重建二叉树

grllery的博客 490

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

leetcode || 105、Construct Binary Tree from Preorder and Inorder Traversal

problem: Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. Hide Tags  Tree Array Depth-first

hustyangju的足迹 857

leetcode---105. Construct Binary Tree from Preorder and Inorder Traversal C++题解

105. Construct Binary Tree from Preorder and Inorder Traversal 这道题剑指offer已经做过了,见重建二叉树 直接复制思路: C++。首先要知道一个结论,前序/后序+中序序列可以唯一确定一棵二叉树,所以自然而然可以用来建树。 看一下前序和中序有什么特点,前序1,2,4,7,3,5,6,8 ,中序4,7,2,1,5,3,8,6; 有...

bbkgl的博客 390

LeetCode105:Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. For example, given preorder = [3,9,20,15,7] inorder = [9,3...

卷卷萌的博客 218

【LeetCode 面试经典150题】105. Construct Binary Tree from Preorder and Inorder Traversal 从前序和中序构造二叉树

Given two integer arrays and where is the preorder traversal of a binary tree and is the inorder traversal of the same tree, construct and return the binary tree.给定两个整数数组 和 ,其中 是二叉树的前序遍历,而 是同一棵树的中序遍历,根据这两个数组构造并返回这棵二叉树。输入: = [3,9,20,15,7], = [9,3,1

qq_43513394的博客 546

【LeetCode 105】Construct Binary Tree from Preorder and Inorder Traversal

题意: 给出二叉树的前序和中序遍历,建造出二叉树。 思路: dfs,根据前序的第一个值是树的根节点,在中序中找到根节点,然后分为左右子树,这样递归解决。 代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *...

iCode_girl的博客 129

从前序与中序遍历序列构造二叉树(LeetCode 105):递归分治与哈希表索引推导详解

本文以《Krahets 笔面试精选 88 题》中 105. 从前序与中序遍历序列构造二叉树 一题为载体,系统讲解如何利用**前序遍历确定根节点、中序遍历划分左右子树**的递归分治思想还原整棵二叉树。你将掌握:前序/中序遍历的区间划分性质、递归子问题的索引推导公式、用哈希表将查找根节点的时间降为 O(1) 的优化技巧,并对照仓库内 Python / Java / C++ 三套源码理解实现细节,最终能

gitblog_01141的博客 454

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. For example, given preorder =[3,9,20,15,7] inorder = [9,3,15,20,7] Return the following binary tree: 3 .

taoqick的专栏 204

MAS Windows/Office 激活脚本完整指南:四种方法选对一步到位

屏幕角落那块黑乎乎的"激活 Windows"水印,加上一打开 Office 就飘灰的提醒,是不是你已经忍了很久?多数人第一反应是到处找激活工具,但说实话,你真正需要的可能只是一套开源脚本:Microsoft Activation Scripts(MAS)。它提供 HWID、Ohook、TSforge、Online KMS 四种激活方法,Windows 和 Office 都能管。读完这篇文章,你会清

gitblog_00896的博客 205

Leetcode Golang 105. Construct Binary Tree from Preorder and Inorder Traversal.go

思路 根据前序遍历和中序遍历的结果数组,重新构建二叉树 前序的第一个元素就是数的root节点,从中序中找到根节点,则左边的都是左子树,右边的都是右子树 然后递归 code type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func buildTree(preorder []int, inorder []in...

anakinsun的博客 212

C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告...

剑指offer重建二叉树提交网址:http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tqId=11157或 leetcode 105:https://leetcode.com/problems/construct-binary-tree-from-pre...

weixin_33801856的博客 654
上一篇: Java Singleton Design Pattern (单例模式 SE7 Gold)
下一篇: leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal(中序和后序遍历数组中恢复二叉树)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值