ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DeepSeek LeetCode 107. 二叉树的层序遍历 II Kotlin实现

DeepSeek    LeetCode 107. 二叉树的层序遍历 II Kotlin实现 LeetCode 107. 二叉树的层序遍历 II — Kotlin 实现思路标准 BFS 层序遍历每遍历完一层得到一个 List。题目要求自底向上所以· 方案一每层结果插入到 result 的头部add(0, level)· 方案二正常从顶到底收集最后 reverse()两者时间复杂度相同方案二在底层是数组时不涉及元素移动实际更高效。代码classTreeNode(varval:Int){varleft:TreeNode?nullvarright:TreeNode?null}classSolution{funlevelOrderBottom(root:TreeNode?):ListListInt{valresultmutableListOfListInt()if(rootnull)returnresultvalqueueArrayDequeTreeNode()queue.addLast(root)while(queue.isNotEmpty()){valsizequeue.sizevallevelArrayListInt(size)repeat(size){valnodequeue.removeFirst()level.add(node.val)node.left?.let{queue.addLast(it)}node.right?.let{queue.addLast(it)}}result.add(level)}result.reverse()returnresult}}复杂度分析· 时间复杂度O(n)每个节点进出队列各一次reverse 是 O(层数) ≤ O(n)。· 空间复杂度O(n)队列最多存一层的节点数最坏满二叉树最后一层为 n/2。关键点BFS 分层用 queue.size 作为当前层的节点数循环该次数即可保证一次处理一整层而不是把所有节点混在一起。ArrayDequeKotlin 中 ArrayDeque 做队列比 LinkedList 性能更好且支持 addLast / removeFirst。let 空安全node.left?.let { queue.addLast(it) } 比 if (node.left ! null) 更简洁。自底向上先收集再 reverse()语义清晰也可改用 result.add(0, level)但会有元素搬移开销。
返回列表