lintcode面试题7:根据前序遍历和中序遍历树构造二叉树

根据先序序列和中序序列创建二叉树 思考:如何才能确定一棵树? 结论:    通过中序遍历和先序遍历可以确定一个树                 通过中序遍历和后续遍历可以确定一个树                 通过先序遍历和后序遍历确定不了一个树。 单独先序遍历:能求解根,但不能求解左子树什么时候结束、右子树什么时候开始。 根据先序和中序结果画树 算法 1、通过先序遍历找到根结点A,再通过A在中序遍历的 阅读详情

给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树:

2
/
1 3

补充知识:

前序排列:根节点,左子节点,右子节点
中序排列:左子节点,根节点,右子节点
这里写图片描述

解题思路:

1.根据前序排列第一个数字确定根节点,并在中序排列中确定根节点位置
2.根据根节点的位置确定中序排列中左子树、右子树,中序排列中根节点之前的数字为左子树,根节点之后的部分为右子树
3.根据中序排列中左子树和右子树的长度确定在前序排列中的左子树、右子树
将左子树构建为一个容器,右子树构建为一个容器。
4.递归构建左子树、右子树,直到叶子节点(判断条件为左右子树分别没有子树)

TreeNode * buildTree(vector<int> &preorder, vector<int> &inorder) {
        // write your code here
        TreeNode *root = NULL;
        vector<int> preorder_l,preorder_r,inorder_l,inorder_r;
        int i,root_index=0;

        if(preorder.empty()!=1 || inorder.empty()!=1) {
            root = new TreeNode(preorder[0]); //  在前序队列中找根节点

            //  在中序队列中找出根节点位置
            for(i=0; i<inorder.size(); i++) {
                if(preorder[0] == inorder[i])
                    break;
                root_index++;
            }

            //  左右子树的前序、中序队列
            for(i=0; i<root_index; i++) {
                preorder_l.push_back(preorder[i+1]);
                inorder_l.push_back(inorder[i]);
            }
            for(i=root_index+1; i<inorder.size(); i++) {
                preorder_r.push_back(preorder[i]);
                inorder_r.push_back(inorder[i]);
            }
			//递归构建左右子树
            root->left = buildTree(preorder_l, inorder_l);
            root->right = buildTree(preorder_r, inorder_r);
        }
        return root;
    
        
        
    }

类型 *p=new 类型[];//分配新的内存,指针指向数组第一个元素

[USACO2023-JAN-Bronze] T2 Air Cownditioning II 题解 [USACO2023-JAN-Bronze] T2 Air Cownditioning II题解 阅读详情

相关推荐

SecureCRT 9.0最新版安装与激活全攻略(附驱动识别技巧)

本文提供SecureCRT 9.0最新版的详细安装与激活指南,并重点解析了嵌入式开发中串口连接的硬件驱动识别技巧。内容涵盖从安全获取软件、解决USB转串口驱动兼容性问题,到配置SSH与串口会话的完整流程,旨在帮助开发者和工程师高效部署并精通使用这款终端仿真利器。

star的博客 407

按照前序遍历创建二叉树及树的四种遍历方式

利用前序遍历创建二叉树以及树的四种遍历方式

qq_66506742的博客 9787

三维荧光光谱(EEM)散射干扰实战:从识别到精准切除的完整流程

本文详细解析三维荧光光谱(EEM)中散射干扰的识别与精准切除流程,涵盖瑞利散射和拉曼散射的实战处理技巧。通过drEEM工具箱的应用示例和高级场景解决方案,帮助研究者有效消除散射干扰,提升数据准确性,特别适用于环境样品和生物活体样本分析。

weixin_42554042的博客 327

数据结构_根据先序和中序构建二叉树(C语言)

一、根据前序、中序建立二叉树 1. 建立过程图解 假设我们已知前序序列abcdefg和中序序列cdbaefg 则我们可以构建出如下一颗二叉树 我们可以根据前序序列(根、左、右)和中序序列(左、根、右)的遍历顺序可得,前序序列的第一个数据是根节点,从而我们可以得知,中序序列中的根节点位置,并确定左右两边的子序列分别为左子树和右子树,进而确定前序序列的左右子树序列,如图: 所以构建二叉树的大致过程为: (1)根据前序序列的第一个数据找出中序序列中的根节点位置 (2)根据根节点位置,划分出中序序列的左子树和

小黯 1万+

Win10家庭版中文用户名改英文全攻略:从注册表到环境变量一步不落

本文详细介绍了Windows 10家庭版中文用户名改为英文的完整流程,包括注册表编辑、环境变量调整等关键步骤。通过激活管理员账户、重命名用户文件夹、修改注册表键值等操作,彻底解决因中文路径导致的软件兼容性问题,并提供常见错误解决方案和系统维护建议。

weixin_29227425的博客 427

从工艺文件到寄生分析:手把手教你用华大九天RCExplorer做版图预检(附ITF文件解析)

本文详细介绍了华大九天RCExplorer工具在模拟IC和版图设计中的应用,从工艺文件解析到寄生参数提取的全流程。通过ITF文件的深度解析和实战案例,帮助工程师掌握金属层、介质层及通孔参数的关键影响,提升设计效率与准确性。文章还提供了与StarRC工作流集成的实用技巧,是国产EDA工具应用的权威指南。

weixin_42522552的博客 405

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

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 递归 class Solution: def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode

zjbzwhwhz的博客 1809

Unity中5分钟实现3D高斯泼溅渲染:从原理到实战部署

3D高斯泼溅(3D Gaussian Splatting)是一种新兴的神经渲染技术,它通过显式地使用大量3D高斯椭球来表示场景,革新了传统的体渲染和神经辐射场(NeRF)方法。其核心原理是将这些3D高斯投影到2D屏幕并进行快速光栅化与Alpha混合,从而绕过了耗时的光线步进,实现了极高的渲染效率。这项技术的价值在于,它能够在消费级GPU上达到实时甚至超实时的帧率,同时保持紧凑的数据表达和惊人的视觉细节,极大地降低了高质量3D重建与渲染的门槛。在应用场景上,它正快速渗透到数字孪生、虚拟现实、文化遗产数字化以及

weixin_29474431的博客 271

从前序与中序遍历序列构造二叉树-C语言-LeetCode105题

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

fc12138的博客 244

路径规划 | 详解混合A*算法Hybrid A*(附ROS C++/Python/Matlab仿真)

Hybrid A*算法通过结合连续状态空间搜索、运动约束考虑和轨迹优化等技术,弥补了普通A*算法在高维连续空间和的不足,提高了路径规划的效率和鲁棒性,广泛应用于车规级路径规划。本文详细图解Hybrid A*算法的原理——启发式、维诺耗散项、节点扩展法则等,并给出ROS C++、python、matlab三种语言的仿真实现加深理解

FRIGIDWINTER的博客 1万+

B站评论情感分析实战:Python批量爬取+BERT正负向分类,精准度92%(附完整代码)

用技术手段自动化挖掘用户真实情感,比人工分析更高效、更客观。这套方案的精度能稳定在90%左右,完全满足实际应用需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1025

lintcode 关于二叉树的题目

69. 二叉树的层次遍历 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [[3],[9,20],[15,7]] 挑战 挑战1:只使用一个队列去实现它 挑战2:用BFS算法来做 """ Definition o...

Shirven 216

109. SAP ABAP 应用程序中的锁机制和工作原理介绍

SAP ABAP 系统中的锁概念,是 SAP ABAP 为了保证`数据一致性`而引入的一种保护机制。 像 SAP 这种复杂的企业级应用,系统中同一时间段的同一份数据,可能会有多个 Transaction(终端用户或者 API )同时进行读写操作。为了防止出现数据不一致,SAP ABAP 引入了锁机制。 这种锁机制并非数据库服务器层面的锁,而是在 SAP ABAP 应用服务器层面上工作,加锁和解锁都由专门的 ABAP Function Module 来完成。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1466

剑指Offer题解【Python版】【LintCode】

个人博客:枫之羽 《剑指Offer》 说明:题目顺序和LintCode中的顺序相同。 目录 9. Fizz Buzz 问题 366. 斐波纳契数列 204. 单例 212. 空格替换 365. 二进制中有多少个1 35. 翻转链表 159. 寻找旋转排序数组中的最小值 73. 前序遍历和中序遍历树构造二叉树 40. 用栈实现队列 38. 搜索二维矩阵 II 111. 爬...

feng_zhiyu的博客 1295

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

根据前序序列和中序序列构建二叉树(C++)

根据前序序列和中序序列构建二叉树 如何才能确定一棵树? 通过中序序列和先序序列可以确定一棵树 通过中序序列和后序序列可以确定一棵树 通过先序序列和后序序列则确定不了一棵树!!! So,只要有中序序列,其他序列任意一个都可确定一棵树 通过中序序列和先序序列确定一颗二叉树 给定先序序列 preorder [1 2 4 5 8 3 6 7] 给定中序序列 inorder [4 2 8 5 1 6...

weixin_45801057的博客 2945

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

根据前序遍历与中序遍历构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 思路: 有了前序遍历,首先我们可以知道根节点的值,也就是数组中下标为0的位置,由此创建根节点。 然后在中序遍历中找到根的值所在的下标,切出左右子树的前序和中序。 注意:如果前序遍历的数组长度为0,说明是一棵空树。 下面用具体的例子来说明: 前序:ABCDE 中序:CDBAE 1、首先可以确定A是这棵树的根节点,然后根据中序遍历切出A的左右子树,得到B...

Nan_Feng726的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

由前序和中序序列构造二叉树

思路: 在前序序列中找根结点,利用根结点将中序序列分成两部分(分别是左、右子树)。然后找到左子树的根结点和右子树的根结点,然后再将中序序列已经分好的两部分进行分割,一直递归下去,直到没有子树存在。 class Solution { HashMap<Integer,Integer> map=new HashMap<>(); int[] po; public TreeNode buildTree(int[] preorder, int[] inorder) .

qq_42451178的博客 2587

【例题】已知二叉树的先序序列和中序序列构造二叉树

一棵二叉树的先序遍历序列为EFHIGJK,中序遍历序列为HFIEJKG,则该二叉树根结点的右孩子为 A. H B. E C. F D. G

muyuxifeng的博客 1万+

二叉树(先序,后序,层次)建立及(先序,中序,后序,层次遍历)

个人电子笔记,内容多有雷同---PS:中序创建二叉树是不存在的,因为中序无法确定一棵唯一的二叉树,即可能有两棵或多棵不同的二叉树,它们的中序是一样的。

m0_60939919的博客 1494

二叉树-根据先序遍历和中序遍历序列重建二叉树

java刷题:根据先序遍历序列和中序遍历序列构造二叉树。

Nelson_hehe的博客 1132

Python算法题集_从前序与中序遍历序列构造二叉树

题目105. 从前序与中序遍历序列构造二叉树:给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

长孤秋落的札记 1386

前序中序/中序后序构造二叉树(C++)

在本篇文章中,我们将会用前序和中序构造一棵二叉树,也可以用中序和后序构造一颗二叉树105. 从前序与中序遍历序列构造二叉树106. 从中序与后序遍历序列构造二叉树以上就是今天要讲的内容,本文仅仅详细介绍了前序中序/中序后序构造二叉树。希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~ 😘 😘 😘。

lim6ere的博客 1565

由前序和中序创建二叉树

那么,每一次由根结点所分出来的左子树和右子树的结点,我们可以看做是两个区间,这两个区间就是每一次由根结点分割出来的左子树区间和右子树区间。基本思想我们了解了,这里主要的创建二叉树的方式就是使用 前序的顺序,来从 前序和中序的顺序当中,一次找出这个根结点,在由这个根结点 分割出两个区间,这个两个区间就是这个 根结点对应的 左子树区间和 右子树区间。这样的顺序来进行访问的,也就是说,前序给出的顺序一定是先给出根结点的,那么我们就可以根据前序的顺序来依次递归判断出每个子树的根结点了。

chihiro1122的博客 6670

二叉树代码

#include&lt;iostream&gt; using namespace std; typedef struct BiTNode {     char data;     struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; void PreOrderTraverse(BiTree T)//二叉树的先序遍历 {     if (T == N...

luolvzhou的博客 750

根据前序遍历构建二叉树

//如何只有前序遍历(带空节点的)创建二叉树 /* 1.无法直接切割为左右子树序列 2.在创建树的过程中,会得到用掉了多少个节点 */ //返回两个值,创建好树的根节点,用掉的个数,用一个类包起来 public class Solution9020{ private static class TreeNode { int val; TreeNode left;...

laly123321的博客 2191

【二叉树】前序遍历创建二叉树 C++

前序遍历创建二叉树

lynn_flame的博客 3999
上一篇: Fizz Buzz 问题(vector添加元素,int转string)
下一篇: lintcode面试题30:带最小值操作的栈
有多少个小土豆
博客等级 码龄10年 235粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值