当前位置:网站首页>【二叉树】前序遍历构造二叉搜索树
【二叉树】前序遍历构造二叉搜索树
2022-06-30 16:36:00 【豪冷啊】
0x00 题目
给定一个整数数组
它表示BST(即二叉搜索树 )的 先序遍历
构造树并返回其根节点
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 bstFromPreorder(_ preorder: [Int]) -> TreeNode? {
if preorder.isEmpty { return nil }
func build(_ start: Int, _ end: Int) -> TreeNode? {
if start > end { return nil }
else if start == end { return TreeNode(preorder[start]) }
var l = start
var r = end
let first = preorder[start]
// 在区间 [l...r] 内找 最后一个 小于 first 的下标
while l < r {
let mid = l + (r - l + 1) / 2
// 小于往右找
if preorder[mid] < first {
l = mid
}else{
r = mid - 1
}
}
// 第一个元素是根节点
let node = TreeNode(first)
node.left = build(start+1, l)
node.right = build(l+1, end)
return node
}
let r = build(0, preorder.count-1)
return r
}
0x03 我的作品
欢迎体验我的作品之一:小笔记-XNote
让笔记一步到位App Store 搜索即可~
边栏推荐
- Shutter music recording playing audioplayers
- 每日面试1题-蓝队基础面试题-应急响应(1)应急响应基本思路流程+Windows入侵排查思路
- Apache 解析漏洞(CVE-2017-15715)_漏洞复现
- Nielseniq welcomes dawn E. Norvell, head of retail lab, to accelerate the expansion of global retail strategy
- 构建基本buildroot文件系统
- 编写C语言的最简单小程序Hello world
- .NET ORM框架HiSql实战-第一章-集成HiSql
- Exch:Exchange Server 2013 即将终止支持
- [Netease Yunxin] playback demo build: unable to convert parameter 1 from "asyncmodalrunner *" to "std:: nullptr\u T"**
- Ten thousand volumes - list sorting [01]
猜你喜欢

Interview shock 60: what will cause MySQL index invalidation?

MOOG servo valve d661-4577c

解决方法:STM32使用cJSON解析数据失败

开发那些事儿:如何在视频中添加文字水印?

Login box tricks

Parker Parker sensor p8s-grflx

构建基本buildroot文件系统

Building a basic buildreoot file system

Servlet运行原理_API详解_请求响应构造进阶之路(Servlet_2)

MIT科技评论2022年35岁以下创新者名单发布,含AlphaFold作者等
随机推荐
【C语言】详解线程 — 开启两个线程
Map collection
后渗透之文件系统+上传下载文件
Network: principle and practice of server network card group technology
Course design for the end of the semester: product sales management system based on SSM
分布式机器学习:模型平均MA与弹性平均EASGD(PySpark)
Exch:完整性检查 Database Integrity Checking
JS from prototype chain to inheritance
Daily question brushing record (IX)
巴比特 | 元宇宙每日必读:未成年人打赏后要求退款,虚拟主播称自己是大冤种,怎么看待这个监管漏洞?...
【架构】1366- 如何画出一张优秀的架构图
水平视觉错误效果js特效代码
【C语言】详解线程 — 通过 “加锁” 解决并发程序引起的共享内存问题
The gates of Europe
万卷书 - 书单整理 [01]
IEEE TBD SCI影响因子提升至4.271,位列Q1区!
Word中添加代码块(转载)
Animesr: learnable degradation operator and new real world animation VSR dataset
[C language] explain threads - start two threads
Flutter custom component