【二叉树】重建二叉树
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
搜索即可~
【二叉树】重建二叉树相关推荐
- 二叉树——重建二叉树
二叉树--重建二叉树 例如,某二叉树为: 前序遍历为:(4,7,9,2,1,5,6) 中序遍历为:(7,9,4,1,2,6,5) 后序遍历为:(9,7,1,6,5,2,4) 1.前序遍历+中序遍历 = ...
- 剑指offer:面试题07. 重建二叉树
题目: 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,20,15,7 ...
- 根据二叉树的前序遍历和中序遍历重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 剑指offer_第4题_重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果 请重建出该二叉树 假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- python根据二叉树的前序遍历和中序遍结果历重建二叉树
python根据二叉树的前序遍历和中序遍结果历重建二叉树 前序遍历 对于当前节点,先输出该节点,然后输出他的左孩子,最后输出他的右孩子.以上图为例,递归的过程如下: (1):输出 1,接着左孩子: ( ...
- 《编程之美》读书笔记19: 3.9 重建二叉树
<编程之美>读书笔记19: 3.9 重建二叉树 对根节点a以及先序遍历次序P和中序遍历次序I,查找a在I中的位置,将I分为两部分,左边部分的元素都在a的左子树上,右边的元素都在a的右子树上 ...
- 剑指Offer系列 重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 剑指offer——面试题7:重建二叉树
1 // 面试题7:重建二叉树 2 // 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输 3 // 入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1, ...
- 【剑指Offer】面试招聘题目2:重建二叉树
题目链接:http://ac.jobdu.com/problem.php?cid=1039&pid=1 题目描述: 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输 ...
- JAVA实现重建二叉树(《剑指offer》)
最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...
最新文章
- Ubuntu 系统 Pycharm中无法使用中文输入法问题
- JavaScript中的JS引擎的执行机制
- 提取某一个镇的行政边界_接口测试:A04_HttpRunner通用_02_提取数据_02_regex方式
- 监控——《微服务设计》读书笔记
- [转载] 《财富》评最受尊敬IT企业:苹果居首IBM次席
- 70个python毕设项目_56个具有开创性的Python开源项目-开始使用Python
- Visual Studio调试技巧
- 学习资料参考:从深度学习到自然语言处理
- 英特尔回应安全漏洞问题:已在硬件层面解决
- vs 调用matlab引擎,vs2010 matlab混合编程调用matlab引擎
- pytorch学习笔记(四):线性回归从零开始实现
- 全站仪坐标计算机公式,全站仪使用方法及坐标计算讲解
- 51Nod-1008 N的阶乘 mod P【模除】
- LeetCode之两个数组的交集
- android本地图片选择(相册选取,相机拍摄)
- LeetCode 74.搜索二维矩阵
- linux ata4 serror,linux – 如何将kern.log错误消息中的ataX.0标识符映射到实际的/ dev / sdY设备?...
- ffmpeg 音频处理
- html手机保存图片不显示,手机保存的图片在相册显示不了解决方法
- 涉密计算机怎么更新补丁,当需要将病毒库、系统补丁程序等导入到涉密信息系统时采用什么方式...