根据前序和中序构造整个二叉树

前序遍历:根 左 右
中序遍历:左 根 右

  1. 先根据前序遍历,得到根节点3,然后看中序遍历,可以知道9是3的左孩子[15,20,7]是3的右孩子

  2. 再去先序遍历的到9,再到中序遍历可知,9左右孩子都为空,

  3. 再根据前序遍历得到根节点20,再根据中序遍历得到20的左子树是15, 右子树是17;

总结: 先根据先序遍历得到根节点,在去中序遍历中根据根节点找到左右两个子树。重复上述步骤即可

思想有了,代码实现起来还是……有点问题

  1. 为了能够快速在中序遍历得到根节点的位置这里使用哈希表,遍历中序树将每个数存储在哈希表中。

  2. 如何得到左子树前序遍历的端点?这是一个难点,即图中红色箭头的位置。

我们知道左子树的中序遍历和左子树的前序遍历长度是一致的.假设左子树前序遍历的右端点为x;

k - 1 - il + 1 = x - (pl + 1) + 1
=> k - il + pl = x

var buildTree = function(preorder, inorder) {let pos = new Map();for (let i = 0; i < inorder.length; i ++) {pos.set(inorder[i], i);}return build(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1);function build(preorder, inorder, pl, pr, il, ir) {if (pl > pr) return null;let root = new TreeNode(preorder[pl]); // 前序遍历的第一个节点是根节点let k = pos.get(root.val); // 得到在root.left = build(preorder, inorder, pl + 1, pl + k - il, il, k - 1);root.right = build(preorder, inorder,pl + k - il + 1, pr , k + 1, ir);return root;}
};

根据前序和中序构造整个二叉树相关推荐

  1. 数据结构---前序和中序遍历的二叉树序列还原二叉树

    数据结构-前序和中序遍历的二叉树序列还原二叉树 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...

  2. LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...

    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...

  3. 二叉树经典题之从前序和中序遍历构建二叉树

    前言: 二叉树刷题是有固定思维的,请移步 README]二叉树刷题框架 文章目录 前言: 从前序和中序遍历构建二叉树 思路 代码 注意 从中序和后序遍历构建二叉树 思路 代码 从前序和中序遍历构建二叉 ...

  4. 【LeetCode】——根据前序和中序遍历构建二叉树

    题目描述:从前序与中序遍历序列构建二叉树 注意:你可以假设数中没有重复元素. 例如,给出: 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,2 ...

  5. 根据前序和中序 构造二叉树

    假设前序  char pstr[] = "abdcef"        中序为 char mstr[] = "dbaecf"     构造该二叉树 递归思想,首 ...

  6. 4、根据前序和中序,重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  7. 前序遍历+中序遍历重建二叉树

    文章目录 题目 AC代码 题目 本题链接:剑指 Offer 07. 重建二叉树 注:链接题目仅代表和本题大体相似 因为是考研笔试,本题代码以C语言去写 AC代码 代码解释:本题要求就是给定两个序列:分 ...

  8. 面试题6--利用前序和中序遍历重构二叉树--递归方法

    class TreeNode:    def __init__(self,data,left,right):        self.data=data        self.left=left   ...

  9. 数据结构---后序和中序遍历的二叉树序列还原二叉树

    数据结构-后序和中序遍历的二叉树序列还原二叉树 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...

最新文章

  1. 从 React Router 谈谈路由的那些事
  2. 求二叉树指定结点到根的路径c语言,二叉树根节点到叶子结点和为指定值的路径...
  3. .net 把一个对象赋值给一个参数_Java:new一个对象的过程中发生了什么?
  4. 表格是html文档的基本属性吗,Html
  5. 剑指Offer之扑克牌顺子
  6. Android小应用-----画画板
  7. 30岁学python有前途吗-我30岁了,转行学编程可以吗? 排除法告诉你答案
  8. 知识星球限时优惠活动,速进!
  9. 代码 点胶gcode_3D打印机启停代码Gcode
  10. MySQL安全你不知道的事
  11. 形式语言与自动机之一 语言与文法
  12. linux怎么进tmp目录,关于linux下tmp文件夹
  13. 空间中球坐标与直角坐标的互化(matlab实现)
  14. 5G LTE窄带物联网(NB-IoT) 5
  15. Tomcat使用过滤器实现页面的限制访问,登录才能访问受限页面
  16. 1.12 将工作簿导出为PDF文件 [原创Excel教程]
  17. 百度云生态分享日| 网络技术及应用主题沙龙圆满落幕
  18. 算法 — 十六进制转八进制
  19. python生成图形验证码_python生成图片验证码
  20. 微服务架构 基础(三)

热门文章

  1. 本地修改PHP修改文件,PHP脚本批量修改本地文件名
  2. lodop直接打印怎么去除水印_手机视频有水印怎么办?一招教你轻松去除,不学真是可惜了...
  3. error processing request什么意思_从processing到Touchdesigner小教程
  4. python电脑下载安装-Python的下载安装与Python编辑器的安装
  5. 用python画小黄人-怎么用python画小黄人
  6. python编程入门第3版pdf-Python编程入门第3版PDF电子书免费下载
  7. python学了真的很有用吗-会Python的人工作不会太差?编程课真的有必要学吗?
  8. python编程入门电子书-Python编程从入门到实践PDF电子书
  9. python代码翻译器-【分享】python 翻译器,爬取百度翻译,并附上源码
  10. 语音识别怎么最终识别出字?