新闻详情

新闻详情

首页 / 资讯中心 / 详情

元宝 LeetCode 116.填充每个节点的下一个右侧节点指针 Kotlin实现

发布时间:2026/9/27 22:51:39来源:尧图网络
元宝    LeetCode 116.填充每个节点的下一个右侧节点指针 Kotlin实现
在 Kotlin 中实现 LeetCode 116 非常直观因为 Kotlin/JVM 具有垃圾回收机制不需要像 Rust 那样处理所有权直接像 Python 一样操作对象引用即可同时享受空安全Null Safety带来的编译期检查。以下提供 迭代法 和 递归法 两种 Kotlin 实现。前置LeetCode 中的 Node 定义LeetCode 已内置无需提交class Node(varval: Int) {var left: Node? nullvar right: Node? nullvar next: Node? null}方法一迭代法O(1) 空间推荐利用上一层已经连接好的“next” 指针横向遍历并连接下一层的子节点。class Solution {fun connect(root: Node?): Node? {if (root null) return null// leftmost 指向每一层的最左节点 var leftmost: Node? root // 只要当前层不是叶子层即还有下一层 while (leftmost?.left ! null) { // head 用于遍历当前层的节点 var head: Node? leftmost while (head ! null) { // 1. 同一个父节点左孩子 - 右孩子 head.left!!.next head.right // 2. 不同父节点右孩子 - 下一个节点的左孩子 if (head.next ! null) { head.right!!.next head.next!!.left } // 沿着 next 指针移动到当前层下一个节点 head head.next } // 进入下一层最左边的节点 leftmost leftmost.left } return root }}方法二递归法简洁直观利用递归栈隐式完成层序遍历代码更短。class Solution {fun connect(root: Node?): Node? {if (root?.left ! null) {// 左孩子指向右孩子root.left!!.next root.right// 如果当前节点有 next右孩子指向下一个节点的左孩子 if (root.next ! null) { root.right!!.next root.next!!.left } // 递归处理左右子树 connect(root.left) connect(root.right) } return root }}Kotlin 实现要点解析空安全操作符“?.”安全调用如果对象为“null” 则返回“null” 而不抛异常如“leftmost?.left ! null”。“!!”非空断言在逻辑上已经确定不为“null” 时使用如“head.left!!”相当于告诉编译器“相信我这里不是 null”。“var head: Node? leftmost”声明可空的变量方便在“while” 循环中修改引用。2. 无所有权负担与 Rust 不同Kotlin 中直接通过“.next ” 赋值即可修改指针不需要“borrow_mut” 或“Rc::clone”写起来和 Python 一样简洁。3. 尾递归优化虽然递归解法没有显式加“tailrec”因为有两个递归调用不是尾递归但 Kotlin/JVM 的栈深度对于 O(\log N) 的完美二叉树完全足够。复杂度分析时间复杂度O(N)每个节点仅访问一次。空间复杂度迭代法O(1)只使用固定数量的指针。递归法O(log N)递归调用栈的深度树的高度。你可以直接把“class Solution” 里的代码复制到 LeetCode Kotlin 编辑器提交。需要我帮你把这段代码改成 LeetCode 117普通二叉树 的 Kotlin 版本或者对比一下 Kotlin 和 Rust 实现上的核心差异 吗
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Word表格跨文档粘贴变形原因与解决方案全解析 2026/9/27 23:48:08

Word表格跨文档粘贴变形原因与解决方案全解析

1. 从一个让人抓狂的场景说起你有没有遇到过这种情况:花了大半天时间在一个Word文档里精心调整好一张表格——列宽、行高、字体、边框、底纹,每一项都反复微调过,看起来赏心悦目。然后你打开另一个Word文档,选中这张表格&#xff…

阅读更多 →
Wand-Enhancer:3 个阶段给 Wand 客户端打好补丁,远程面板、禁用自动更新全拿下 2026/9/27 23:48:08

Wand-Enhancer:3 个阶段给 Wand 客户端打好补丁,远程面板、禁用自动更新全拿下

Wand-Enhancer:3 个阶段给 Wand 客户端打好补丁,远程面板、禁用自动更新全拿下 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer …

阅读更多 →
3步搞定WordPress增加板块,图解步骤让SEO提速50% 2026/9/27 23:48:08

3步搞定WordPress增加板块,图解步骤让SEO提速50%

3步搞定WordPress增加板块,图解步骤让SEO提速50% 改个需求建站公司拖一周?这种破事在WordPress里根本不用等。…

阅读更多 →
鼠大侠网络验证系统源码解析:一机一码授权验证与心跳机制实现 2026/9/27 23:47:55

鼠大侠网络验证系统源码解析:一机一码授权验证与心跳机制实现

简介:鼠大侠网络验证系统源码是一套面向软件开发者与独立作者的授权验证解决方案,采用一机一码机制,帮助解决软件防破解、防账号共享与多开等常见问题,客户端对接简单,支持多种开发语言接入。资源包共114个文件&#x…

阅读更多 →
合成双重差分SDID:从DID到SCM的融合与Stata实操指南 2026/9/27 23:47:55

合成双重差分SDID:从DID到SCM的融合与Stata实操指南

1. 从双重差分到合成双重差分:为什么需要SDID做过政策评估的人都知道,双重差分(DID)是最常用的因果推断工具之一。它的逻辑很朴素:找一个受政策影响的处理组,再找一个没受影响的对照组,比较两组…

阅读更多 →
Uniapp与Uniapp X核心差异解析:从架构到迁移的实战指南 2026/9/27 23:47:49

Uniapp与Uniapp X核心差异解析:从架构到迁移的实战指南

1. 从一次真实的项目踩坑说起去年年底我接手了一个老项目的重构,代码是五年前用 Uniapp 写的,跑在微信小程序和 App 两端。功能不算复杂,但代码量堆到了十几万行,vue2的选项式写法混着大量mixins,状态管理用的是vuex&a…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉