新闻详情

新闻详情

首页 / 资讯中心 / 详情

Kimi LeetCode 114.二叉树展开为链表 Python3实现

发布时间:2026/9/27 22:55:27来源:尧图网络
Kimi    LeetCode 114.二叉树展开为链表 Python3实现
LeetCode 114. 二叉树展开为链表 — Python3 实现题目要求将二叉树原地in-place展开为单链表链表顺序为先序遍历顺序使用right指针作为链表的next指针。思路一递归后序展开O(n)O(n)O(n)从下往上处理先把左右子树分别展开成链表然后把右子树挂到左子树链表的末尾再把整棵左子树挂到根的右边。# Definition for a binary tree node.# class TreeNode:# def __init__(self, val0, leftNone, rightNone):# self.val val# self.left left# self.right rightclassSolution:defflatten(self,root:Optional[TreeNode])-None: Do not return anything, modify root in-place instead. defflatten_and_return_tail(node):将子树展开为链表返回链表尾节点ifnotnode:returnNone# 叶子节点自己就是尾节点ifnotnode.leftandnotnode.right:returnnode left_tailflatten_and_return_tail(node.left)# 展开左子树right_tailflatten_and_return_tail(node.right)# 展开右子树ifleft_tail:# 左子树链表末尾接右子树left_tail.rightnode.right node.rightnode.left node.leftNone# 尾节点优先右子树的尾否则左子树的尾returnright_tailorleft_tail flatten_and_return_tail(root)时间复杂度O(n)每个节点访问一次空间复杂度O(h)递归栈深度h 为树高最坏 O(n)思路二迭代找左子树最右节点O(1)O(1)O(1)额外空间对当前节点若存在左子树则找到左子树的最右节点把右子树挂到它后面再将左子树移到右边classSolution:defflatten(self,root:Optional[TreeNode])-None:currrootwhilecurr:ifcurr.left:# 找到左子树的最右节点predecessorcurr.leftwhilepredecessor.right:predecessorpredecessor.right# 将右子树接到左子树最右节点之后predecessor.rightcurr.right# 左子树移到右边curr.rightcurr.left curr.leftNone# 移动到下一个节点即原来的左子树根currcurr.right时间复杂度O(n)空间复杂度O(1)无需递归栈思路三反向先序遍历Morris 思想变体利用先序遍历的逆序右 → 左 → 根逐个把节点接到prev的右边classSolution:defflatten(self,root:Optional[TreeNode])-None:prevNonedefdfs(node):nonlocalprevifnotnode:returndfs(node.right)# 先处理右子树dfs(node.left)# 再处理左子树# 处理根把 prev 接到当前节点的右边node.rightprev node.leftNoneprevnode dfs(root)时间复杂度O(n)空间复杂度O(h)关键点总结顺序陷阱链表顺序是先序根 → 左 → 右不是中序别搞混。思路二的精髓左子树最右节点正是先序遍历中左子树的最后一个节点所以它后面接右子树刚好保持先序顺序——这一步想清楚代码就是顺势写出来的。原地修改三种方法都只修改指针不新建节点满足 in-place 要求。示例树[1,2,5,3,4,null,6]展开为1 → 2 → 3 → 4 → 5 → 6✅
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

SpringBoot+Vue图书馆管理系统源码拆包:从环境搭建到前后端联调全流程 2026/9/27 23:47:29

SpringBoot+Vue图书馆管理系统源码拆包:从环境搭建到前后端联调全流程

简介:这是一套基于Vue.js与SpringBoot的图书馆管理系统完整源码,面向Java Web初学者、课程设计或毕业设计开发者,帮助快速搭建前后端分离的图书管理项目。压缩包共152个文件,约11.79MB,包含19个Java后端类、14个Vue组件…

阅读更多 →
Wand-Enhancer 三步免费解锁专业版:新手补丁教程 2026/9/27 23:47:29

Wand-Enhancer 三步免费解锁专业版:新手补丁教程

Wand-Enhancer 三步免费解锁专业版:新手补丁教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer 是开源本地补丁工具&am…

阅读更多 →
耒阳市古雍网站建设店新手入门:网站被黑挂马3招急救 2026/9/27 23:47:22

耒阳市古雍网站建设店新手入门:网站被黑挂马3招急救

耒阳市古雍网站建设店新手入门:网站被黑挂马3招急救 昨晚11点,手机突然弹出一条短信,说你的网站出现了非法内容。你慌了,打开浏览器一看,首页赫然挂着博彩广告,后台登录密码也被重置了。这时候,新手最容易犯的错误就是立刻删库重装,结果数据全丢,…

阅读更多 →
treg:轻量级终端正则调试工具,纯Go编写,离线可用 2026/9/27 23:47:16

treg:轻量级终端正则调试工具,纯Go编写,离线可用

1. 项目概述:Treg 不是缩写,而是真实存在的开源 CLI 工具最近在多个开发者社区和终端工具讨论区里,“treg”这个词频繁出现,但很多人第一反应是——这会不会是 T-Regulatory cell(调节性T细胞)的缩写&#…

阅读更多 →
Python程序打包实战:PyInstaller与Kivy打包EXE和APK全指南 2026/9/27 23:47:09

Python程序打包实战:PyInstaller与Kivy打包EXE和APK全指南

1. 从脚本到可执行文件:为什么打包这件事值得认真对待写过Python的人大概都有过这样的经历:本地跑得好好的脚本,发给同事或者朋友,对方一句“我电脑上没装Python”就把你堵回来了。尤其是做一些小工具、自动化脚本、爬虫可视化界面…

阅读更多 →
智慧养老微信小程序源码实战:从环境搭建到核心模块二次开发 2026/9/27 23:47:03

智慧养老微信小程序源码实战:从环境搭建到核心模块二次开发

简介:这是一套面向高校计算机及相关专业学生的智慧养老微信小程序毕业设计源码,采用JavaScript开发,已通过指导教师审核并获优秀评价,适合用作毕业设计课题、课程实践或学期综合作业。项目聚焦养老服务数字化场景,涵盖…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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