0x00 题目

输入某二叉树的前序遍历和中序遍历的结果
构建该二叉树并返回其节点

假设输入的前序遍历和中序遍历的
结果中都不含重复的数字


0x01 思路

前序遍历的路径是:,左,右
中序遍历的路径是:左,,右
为分界点,可以分割出左右子树
再分别对左右子树进行分割即可


0x02 解法

语言:Swift

树节点:TreeNode

public class TreeNode {public var val: Intpublic var left: TreeNode?public var right: TreeNode?public init() { self.val = 0; self.left = nil; self.right = nil; }public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {self.val = valself.left = leftself.right = right}
}

解法:

func buildTree(_ preorder: [Int], _ inorder: [Int]) -> TreeNode? {// 中序遍历中,值 对应的 索引var dict: [Int:Int] = [:]for i in 0..<inorder.count {dict[inorder[i]] = i}func build(_ preorder: [Int], _ preStart: Int, _ preEnd: Int, _ inorder: [Int], _ inStart: Int, _ inEnd: Int) -> TreeNode? {if preStart > preEnd || inStart > inEnd {return nil}let val = preorder[preStart]// 对应的索引let index = dict[val]!// 左子树在数组中的长度let leftSize = index - inStartlet root = TreeNode(val)root.left = build(preorder, preStart+1, preStart+leftSize, inorder, inStart, index-1)root.right = build(preorder, preStart+leftSize+1, preEnd, inorder, index+1, inEnd)return root}let node = build(preorder, 0, preorder.count-1, inorder, 0, inorder.count-1)return node
}

0x03 我的小作品

欢迎体验我的作品之一:小编辑器-XCompiler
小巧的在线编辑器
App Store 搜索即可~


【二叉树】重建二叉树相关推荐

  1. 二叉树——重建二叉树

    二叉树--重建二叉树 例如,某二叉树为: 前序遍历为:(4,7,9,2,1,5,6) 中序遍历为:(7,9,4,1,2,6,5) 后序遍历为:(9,7,1,6,5,2,4) 1.前序遍历+中序遍历 = ...

  2. 剑指offer:面试题07. 重建二叉树

    题目: 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,20,15,7 ...

  3. 根据二叉树的前序遍历和中序遍历重建二叉树

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

  4. 剑指offer_第4题_重建二叉树

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

  5. python根据二叉树的前序遍历和中序遍结果历重建二叉树

    python根据二叉树的前序遍历和中序遍结果历重建二叉树 前序遍历 对于当前节点,先输出该节点,然后输出他的左孩子,最后输出他的右孩子.以上图为例,递归的过程如下: (1):输出 1,接着左孩子: ( ...

  6. 《编程之美》读书笔记19: 3.9 重建二叉树

    <编程之美>读书笔记19: 3.9 重建二叉树 对根节点a以及先序遍历次序P和中序遍历次序I,查找a在I中的位置,将I分为两部分,左边部分的元素都在a的左子树上,右边的元素都在a的右子树上 ...

  7. 剑指Offer系列 重建二叉树

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

  8. 剑指offer——面试题7:重建二叉树

    1 // 面试题7:重建二叉树 2 // 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输 3 // 入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1, ...

  9. 【剑指Offer】面试招聘题目2:重建二叉树

    题目链接:http://ac.jobdu.com/problem.php?cid=1039&pid=1 题目描述: 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输 ...

  10. JAVA实现重建二叉树(《剑指offer》)

    最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...

最新文章

  1. Ubuntu 系统 Pycharm中无法使用中文输入法问题
  2. JavaScript中的JS引擎的执行机制
  3. 提取某一个镇的行政边界_接口测试:A04_HttpRunner通用_02_提取数据_02_regex方式
  4. 监控——《微服务设计》读书笔记
  5. [转载] 《财富》评最受尊敬IT企业:苹果居首IBM次席
  6. 70个python毕设项目_56个具有开创性的Python开源项目-开始使用Python
  7. Visual Studio调试技巧
  8. 学习资料参考:从深度学习到自然语言处理
  9. 英特尔回应安全漏洞问题:已在硬件层面解决
  10. vs 调用matlab引擎,vs2010 matlab混合编程调用matlab引擎
  11. pytorch学习笔记(四):线性回归从零开始实现
  12. 全站仪坐标计算机公式,全站仪使用方法及坐标计算讲解
  13. 51Nod-1008 N的阶乘 mod P【模除】
  14. LeetCode之两个数组的交集
  15. android本地图片选择(相册选取,相机拍摄)
  16. LeetCode 74.搜索二维矩阵
  17. linux ata4 serror,linux – 如何将kern.log错误消息中的ataX.0标识符映射到实际的/ dev / sdY设备?...
  18. ffmpeg 音频处理
  19. html手机保存图片不显示,手机保存的图片在相册显示不了解决方法
  20. 涉密计算机怎么更新补丁,当需要将病毒库、系统补丁程序等导入到涉密信息系统时采用什么方式...

热门文章

  1. 圣思园——Java SE Lesson 5
  2. hypermill 2018多轴编程带刀路3D图档
  3. css层叠样式表、基本选择器
  4. 每日一算法7--35选7彩票程序
  5. Thinkpad T420,430等电脑使用微信进行语音视频时麦克杂音
  6. Linux环境C语言开发基础
  7. 八种基本数据类型(一)
  8. 显式类型转换和隐式类型转换区别?
  9. 达内培训python百度云下载
  10. 超简单 不进PE 不用U盘 自己重装电脑系统步骤