[leetcode]从中序与后序/前序遍历序列构造二叉树

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

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]

返回如下的二叉树:

    3/ \9  20/  \15   7

思路: 根据构造二叉树的流程,中序遍历的访问顺序为左-中-右;后序遍历的方位顺序为左-右-中。

  1. 后序最后一个节点为根节点,在中序列表中查找根节点值
  2. 将中序列表分割成左子树中序列表和右子树中序列表
  3. 因为对于同样的树中序和后序列表长度相同,所以根据左子树中序列表和右子树中序列表的长度将后序列表分割成左子树后序和右子树后序
  4. 对左子树根节点,右子树根节点递归调用
  5. 返回根节点
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) 
{int n=inorder.size();if(n>0){TreeNode* root=new TreeNode(postorder[n-1]);vector<int>::iterator it=find(inorder.begin(),inorder.end(),postorder[n-1]);vector<int> il,ir,pl,pr;il.assign(inorder.begin(),it);ir.assign(it+1,inorder.end());int l,r;l=il.size();r=ir.size();//中序后序遍历长度相等pl.assign(postorder.begin(),postorder.begin()+l);pr.assign(postorder.begin()+l,postorder.end());root->left=buildTree(il,pl);root->right=buildTree(ir,pr);return root;}else return NULL;
}

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

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

    3/ \9  20/  \15   7

思路:
和中序后序构造思路基本一致
根据构造二叉树的流程,前序遍历的访问顺序为中-左-右,中序遍历的访问顺序为左-中-右。

  1. 前序第一一个节点为根节点,在中序列表中查找根节点值
  2. 将中序列表分割成左子树中序列表和右子树中序列表
  3. 因为对于同样的树中序和前序列表长度相同,所以根据左子树中序列表和右子树中序列表的长度将前序列表分割成左子树前序和右子树前序
  4. 对左子树根节点,右子树根节点递归调用
  5. 返回根节点
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) 
{int n=preorder.size();if(n>0){TreeNode* root=new TreeNode(preorder[0]);vector<int>::iterator it=find(inorder.begin(),inorder.end(),preorder[0]);vector<int> il,ir,pl,pr;il.assign(inorder.begin(),it);ir.assign(it+1,inorder.end());int l,r;l=il.size();r=ir.size();//中序前序遍历长度相等pl.assign(preorder.begin()+1,preorder.begin()+l+1);pr.assign(preorder.begin()+l+1,preorder.end());root->left=buildTree(pl,il);root->right=buildTree(pr,ir);return root;}else return NULL;
}

转载于:https://www.cnblogs.com/wendyy/p/9332633.html

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

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

相关文章

Leetcode--56. 合并区间

给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为…

oracle课程设计摘要,Oracle程序设计课程设计概要(doc 35页)

Oracle程序设计课程设计概要目录&#xff1a;《Oracle数据库应用与开发实例教程》是学习数据库技术的高级阶段课程&#xff0c;读者应该在选择学习《数据库应用基础实例教程》、《Access2003数据库实用教程》、《SQL Server 数据库应用基础与实现》和《SQL Server2005 实例教程…

2020年度中国生命科学十大进展公布 | 中国科协生命科学学会联合体

来源&#xff1a;中国科协生命科学学会联合体本年度的评选&#xff0c;联合体成员学会推荐的项目较往年数量明显增加&#xff0c;体现了“中国生命科学十大进展”评选日臻完善&#xff0c;社会影响力与关注度不断扩大&#xff1b;获奖项目中非院士主导项目所占比例较往年大&…

springmvc log4j配置

1. web.xml <!-- 加载Log4J 配置文件 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>WEB-INF/conf/log4j.properties</param-value> </context-param> <context-param> <pa…

debian php安装pdo扩展,在debian下为PHP5.0.3安装pdo模块

pdo作为下一个php的数据库统一接口&#xff0c;目前的版本是0.9&#xff0c;看来不久就可以release了&#xff0c;抢先尝鲜。经过测试&#xff0c;pdo联结比adodb快3倍左右&#xff0c;和直接联结相差很小。测试工具&#xff1a;AB测试条件Apache/2.0.54 (Debian GNU/Linux) mo…

Leetcode--238. 除自身以外数组的乘积

给定长度为 n 的整数数组 nums&#xff0c;其中 n > 1&#xff0c;返回输出数组 output &#xff0c;其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法&#xff0c;且在 O(n) 时间复杂度内完…

百度研究院发布2021年十大科技趋势预测

来源&#xff1a;百度智能云作者&#xff1a;刘瑾疫情加速 AI 融合落地AI 将更加深入大众生活2020年&#xff0c;全球抗疫促使 AI 与 5G、大数据、物联网等新一代信息技术相互融合&#xff0c;AI 测温、AI 问诊、智能外呼、服务机器人等创新应用开始大规模普及&#xff0c;从生…

oracle的删除的row如何,Oracle 删除大表中部分数据

需求&#xff1a;项目中有一张表大概有7000多万条数据&#xff0c;造成表空间已满&#xff0c;需要清理部分数据&#xff0c;打算清理3000万。2B 做法&#xff1a;delete from table_name where ID > 40000000;备注&#xff1a;select count(1) from table_name where ID &g…

promise请求数据用法

promise请求数据用法 Promise简介 Promise 是异步编程的一种解决方案&#xff0c;比传统的解决方案–回调函数和事件&#xff0d;&#xff0d;更合理和更强大。ES6将其写进了语言标准&#xff0c;统一了语法&#xff0c;里面保存着某个未来才回结束的事件(通常是一个异步操作&a…

jsp出现The import Xxx type is not resolved...

尝试解决步骤&#xff1a; 1.可能是jdk&#xff0c;tomcat版本问题 方法&#xff1a;右键项目&#xff0c;build path->Configure Build Path java bulid path中的libraries若报错&#xff0c;出现红色x&#xff0c;点击它&#xff0c;remove&#xff0c;之后点击Add lib…

欧阳自远:有个性的嫦娥12345,如何不重复美国探月路?

来源&#xff1a;澎湃新闻 作者&#xff1a;虞涵棋“很多事情人家都做过了&#xff0c;中国也不得不做&#xff0c;唯一的要求就是一定要比别人做的好。但总有一两样没人没干过的事&#xff0c;中国一定要干。”1月13日&#xff0c;中国月球探测工程首席科学家、中科院院士欧阳…

linux安装DNS服务命令,Linux下的安装和配置DNS服务器

Linux下的安装和配置DNS服务器发布时间&#xff1a;2008-09-08 17:03:00 作者&#xff1a;佚名 我要评论在Linux操作系统中使用BIND (Berkeley Internet Name Daemon)作为DNS服务器&#xff0c;以下以Linux 的Redhat 7.3发行版本为例&#xff0c;介绍BIND安装、启动和停止…

【转】java反射--注解

【译】8. Java反射——注解 原博地址&#xff1a;https://www.cnblogs.com/penghongwei/p/3300087.html翻译原文地址&#xff1a;http://tutorials.jenkov.com/java-reflection/annotations.html 使用Java反射机制&#xff0c;在运行时你可以访问到Java类中所附属的一些注解。…

多核之后,CPU 的发展方向是什么?中科院计算所包云岗详细解读

来源&#xff1a;知乎作者&#xff1a;包云岗包云岗&#xff0c;中国科学院计算技术研究所研究员、博士生导师、中国科学院大学教授&#xff0c;中国开放指令生态&#xff08;RISC-V&#xff09;联盟秘书长&#xff0c;从事计算机体系结构和开源芯片方向前沿研究&#xff0c;主…

jsp--JavaBean

Java最好和jsp的代码分开写 但是jsp中会有很多内置对象&#xff0c;例如response 涉及到内置对象的代码在Java中自然是错误的&#xff0c;那么该怎么办&#xff1f; 可以将需要调用的Java方法设置几个参数&#xff0c;jsp将内置对象作为参数传过去 Javabean作用&#xff0c;…

weblogic作为linux服务器,weblogic在linux服务器上部署应用

SSH软件连接服务器&#xff1a;服务器地址&#xff1a;xxx.xxx.xxx.40用户名&#xff1a;xxxx密码&#xff1a;xxxx新建文件夹&#xff0c;用来放新代码版本&#xff0c;后面为代码版本号路径&#xff1a;/home/weblogic命令&#xff1a;mkdir wzgcyth_xxxx部署war包拖拽war到路…

几乎无解的最强加密方法,终于被证实真的存在

来源&#xff1a;数学中国图片来源&#xff1a;Kiel Mutschelknaus for Quanta Magazine2018年&#xff0c;加州大学洛杉矶分校的研究生Ayush Jain前往日本&#xff0c;就他和同事正在开发的强大加密算法进行交流。当他讲述团队正在尝试实现不可区分混淆&#xff08;indistingu…

css3布局篇(双飞翼)

大家看到好多电商网站都见过经典三列布局&#xff0c;它也叫做圣杯布局 &#xff0c;是Kevin Cornell在2006年提出的一个布局模型概念&#xff0c;这个在国内最早是由淘宝UED的工程师传播开来&#xff0c;在中国也有叫法是双飞翼布局&#xff0c;它的布局要求有以下的几点&…

tomcat linux环境变量,linux系统为什么需要配置tomcat环境变量

满意答案展开全部 5.JDK安装tar.gz为解压后就可使用的版本&#xff0c;这里我们将jdk-7-ea-bin-b145-linux-i586-07_jun_2011.tar.gz解压到/usr/local下。5.1解压解压到当前目录&#xff1a;$ tar -zxvf /opt/setup/jdk-7-ea-bin-b145-linux-i586-07_jun_2011.tar.gz5.2环境配置…

Servlet介绍

Servlet&#xff1a; Java类必须符合一定的规范&#xff1a; 1.必须继承javax.servlet.http.HttpServlet 2.重写其中的doGet()或doPost()方法 doGet():接受并处理所有get提交方式的请求 doPost():接受并处理所有Post提交方式的请求 Servlet要想使用&#xff0c;必须配置 …