题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。


题目分析:已知二叉树的前序和中序遍历,根据前序遍历和中序遍历的规则,前序遍历的第一个节点一定是根节点,找到最上边的根结点之后,在中序遍历的结果中对应到它的位置,在左边的都是左子树,在右边的都是右子树。按照这个思路递归即可。

首先定义二叉树

            function TreeNode(val){
this.val = val;
this.left = this.right = null
}

定义重建方法,传入两个数组,分别为preorder和inorder

           var buildTree = function(preorder,inorder){
if(!inorder.length || !preorder.length){
return null
} let root = {
val:preorder[0],
left:null,
right:null
}
let i = inorder.indexOf(preorder[0])
console.log(i)
//arrayObject.slice(start,end) 返回选中的元素 包上不包下 从0开始
root.left = buildTree(preorder.slice(1,i+1),inorder.slice(0,i))
//左子树的数量,小坑
root.right = buildTree(preorder.slice(1+i),inorder.slice(i+1)) return root; }

一开始的分析已经知道,前序遍历的第一个节点就是根节点,找到它的位置之后把左右子树第一次分开

然后通过递归依次找到左子树的根节点和右子树的根节点

这里有两个个非常非常重要的结论:1.中序遍历中只要找到根节点,左边都是左子树节点,右边都是右子树节点;2.因为树的节点是一定的,所以无论是左子树还是右子树,它们各自的前序遍历节点数量和中序遍历节点数量都相等。根据结论1,左子树节点为inorder.slice(0,i),右子树节点为inorder.slice(i+1),在前序遍历中找到对应的数量即可。

通过递归的方法,时间复杂度O(n)每个节点都需要有创建的过程和左右子树的重建过程,空间复杂度O(n)用于储存整棵树

JS 剑指Offer(五) 二叉树的重建的更多相关文章

  1. 剑指Offer - 九度1385 - 重建二叉树

    剑指Offer - 九度1385 - 重建二叉树2013-11-23 23:53 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的 ...

  2. 《剑指offer》 二叉树的镜像

    本题来自<剑指offer>二叉树的镜像 题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 ...

  3. 剑指Offer:二叉树打印成多行【23】

    剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...

  4. 剑指Offer:二叉树中和为某一值的路径【34】

    剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...

  5. JS 剑指Offer(四) 从尾到头打印链表

    题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 首先定义一下链表中的节点,关于链表这个数据结构在另外一篇文章中会详细讲 function ListNode(val) { t ...

  6. 剑指 Offer 34. 二叉树中和为某一值的路径 + 记录所有路径

    剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进 ...

  7. 剑指 Offer 34. 二叉树中和为某一值的路径

    剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下 ...

  8. 力扣 - 剑指 Offer 27. 二叉树的镜像

    题目 剑指 Offer 27. 二叉树的镜像 思路1(递归) 我们可以使用深度优先搜索,先递归到链表的末尾,然后从末尾开始两两交换.就相当于后续遍历而已 记得要先保存下来node.right节点,因为 ...

  9. 【剑指Offer】二叉树的镜像 解题报告(Python)

    [剑指Offer]二叉树的镜像 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

  10. 【剑指Offer】二叉树中和为某一值的路径 解题报告(Python)

    [剑指Offer]二叉树中和为某一值的路径 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...

随机推荐

  1. checkbox,radio自定义美化表单

    原理 利用label标签,包裹input的时候,点击label等同于点击input,再用背景图片显示选中和取消选中状态 效果 图片 复选 <!DOCTYPE html> <html& ...

  2. 【前端】这可能是你看过最全的css居中解决方案了~

    1.水平居中:行内元素解决方案 适用元素:文字,链接,及其其它inline或者inline-*类型元素(inline-block,inline-table,inline-flex) html部分代码: ...

  3. [红日安全]Web安全Day9 - 文件下载漏洞实战攻防

    本文由红日安全成员: Once 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字 ...

  4. spring boot整合memcache

    1.导入memcached客户端jar包 <dependency> <groupId>com.whalin</groupId> <artifactId> ...

  5. 必备技能四、ajax及token

    转https://segmentfault.com/a/1190000008470355?utm_source=tuicool&utm_medium=referral 转 https://ww ...

  6. CyclicBarrier源码探究 (JDK 1.8)

    CyclicBarrier也叫回环栅栏,能够实现让一组线程运行到栅栏处并阻塞,等到所有线程都到达栅栏时再一起执行的功能."回环"意味着CyclicBarrier可以多次重复使用,相 ...

  7. 浅谈Java开发三层架构

    三层架构,一般来说就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了“高内聚,低耦合”的思想. 概念简介 1.表现层(UI):简单来说,就是展现 ...

  8. Mysql(Mariadb)数据库之Information Schema 库中GLOBAL_VARIABLES表 and SESSION_VARIABLES 表分析

    Information Schema GLOBAL_VARIABLES and SESSION_VARIABLES Tables The Information Schema GLOBAL_VARIA ...

  9. linux 读取 USB HID鼠标坐标和点击 在 LCD上显示

    首先要,编译内核时启用了 USB HID 设备.启用了 鼠标 . 在开发板上插入usb 时会有如下提示. 可以看到,多了一个 mouse0 和 eventX 打出来的是我的 联想鼠标. 1, 在 终端 ...

  10. .NET 5 Preview 1发布

    去年年底,我们发布了.NET Core 3.0和3.1.这些版本添加了对桌面应用程序模型:Windows Forms(Winforms).WPF,用于构建单页应用程序的ASP.NET Blazor和基 ...