尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

DeepSeek LeetCode 109. 有序链表转换二叉搜索树 Scala实现

发布时间:2026/9/26 11:15:49

资讯中心
01
ARTICLE

DeepSeek LeetCode 109. 有序链表转换二叉搜索树 Scala实现

DeepSeek    LeetCode 109. 有序链表转换二叉搜索树 Scala实现
LeetCode 109. 有序链表转换二叉搜索树 — Scala 实现思路转数组 递归构建链表有序BST 中序遍历也有序。最直接的做法把链表值收集到 Array[Int]。递归取中点作为根左右子区间分别构建左右子树自然得到平衡 BST。代码方案一转数组// Definition for singly-linked list.classListNode(var_x:Int0){varnext:ListNodenullvarx:Int_x}// Definition for a binary tree node.classTreeNode(var_value:Int0){varvalue:Int_valuevarleft:TreeNodenullvarright:TreeNodenull}objectSolution{defsortedListToBST(head:ListNode):TreeNode{// 1. 链表转数组valbufscala.collection.mutable.ArrayBuffer.empty[Int]varcurheadwhile(cur!null){bufcur.x curcur.next}valarrbuf.toArray// 2. 递归构建平衡 BSTdefbuild(lo:Int,hi:Int):TreeNode{if(lohi)nullelse{valmid(lohi)1valnodenewTreeNode(arr(mid))node.leftbuild(lo,mid-1)node.rightbuild(mid1,hi)node}}build(0,arr.length-1)}}代码方案二中序遍历模拟空间 O(log n)不额外开数组用可变的链表当前节点指针配合中序递归objectSolution{defsortedListToBST(head:ListNode):TreeNode{// 1. 计算链表长度varn0varpheadwhile(p!null){n1;pp.next}// 用一个可变的当前链表指针模拟中序遍历varcur:ListNodeheaddefbuild(lo:Int,hi:Int):TreeNode{if(lohi)nullelse{valmid(lohi)1// 先构建左子树会消费链表前半部分valleftbuild(lo,mid-1)// 当前链表节点即根valrootnewTreeNode(cur.x)curcur.next root.leftleft// 再构建右子树root.rightbuild(mid1,hi)root}}build(0,n-1)}}复杂度分析方案 时间复杂度 空间复杂度转数组 O(n) O(n)数组中序模拟 O(n) O(log n)递归栈关键点中序模拟的核心先递归左子树此时链表指针 cur 恰好停在当前根位置取完根后指针后移再递归右子树。这样把链表的顺序和BST 的中序顺序对齐无需随机访问。Scala 的 var cur 闭包捕获嵌套函数 build 能直接读写外层 var cur等价于其他语言的 nonlocal / 可变引用写起来比 Rust 简洁很多。1无符号右移取中点避免 (lo hi) 溢出虽然本题范围安全但这是好习惯。推荐方案二空间更优且不依赖额外数组Scala 中可读性也好推荐优先掌握。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。