当前位置:网站首页>【二叉树】重建二叉树
【二叉树】重建二叉树
2022-08-09 04:10:00 【豪冷啊】
0x00 题目
输入某二叉树的前序
遍历和中序
遍历的结果
请构建
该二叉树并返回其根
节点
假设输入的前序遍历和中序遍历的
结果中都不含
重复的数字
0x01 思路
前序遍历的路径是:中
,左,右
中序遍历的路径是:左,中
,右
以 中
为分界点,可以分割出左右子树
再分别对左右子树进行分割即可
0x02 解法
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public 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 = val
self.left = left
self.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 - inStart
let 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
搜索即可~
边栏推荐
猜你喜欢
了解CV和RoboMaster视觉组(五)参数自适应与稳健特征
If A, B, C, and D process parts, the total number of processed parts is 370. If the number of parts processed by A is 10 more, if the number of parts processed by B is 20 less, if the number of parts
Grid 布局介绍
浅谈进程与其创建方式
Linux安装MySQL8
医学影像分割系统综述Data preparation for artificial intelligence in medical imaging: A comprehensive guide ...
给一时兴起想要学习 “ 测试 ” 的同学的几条建议.....
gopacket usage example
已解决ModuleNotFoundError: No module named ‘Workbook‘
【数学】点积与叉积
随机推荐
盘点检索任务中的损失函数
30 范数
[Graphics] 19 Lighting model (four, Blinn-Phong lighting model)
进程和计划任务管理
Talking about the process and how to create it
『HarmonyOS』Page与AbilitySlice的生命周期
了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:卡尔曼滤波器
「竞品分析报告」不会写?不知从哪收集数据?请收下这篇竞品指南
JS ES5也可以创建常量?
33 基本统计知识——单项非参数检验
HyperLynx(四)差分传输线模型
Mysql表打不开
powershell 执行策略
union
软件质效领航者 | 优秀案例•国金证券DevOps建设项目
【Pyspark】udf使用入门
Swift3.0设置状态栏的背景颜色与文字颜色
【Redis底层解析】跳跃表
From brute force recursion to dynamic programming leetcode Question 62: Different paths
07.1 Supplements to the class