登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
科技
›
【LeetCode 114】算法进阶:二叉树展开为链表 ...
【LeetCode 114】算法进阶:二叉树展开为链表
[ 复制链接 ]
辖瑁地
2025-8-15 16:54:30
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
给你二叉树的根结点 root ,请你将它展开为一个单链表:
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?
需要在不使用额外存储空间的情况下,直接在原二叉树上进行操作。可以使用莫里斯遍历(Morris Traversal)的思想来实现。
莫里斯遍历的核心思想:
莫里斯遍历利用了二叉树的空闲指针(左子树为空时的左指针),将其指向右子树的前驱节点,从而实现中序遍历。我们也可以利用类似的思路来展开二叉树为单链表。
算法步骤:
1.找到左子树的最右节点:
从当前节点的左子树开始,一直向右走,直到找到最右节点。
这个最右节点是左子树的最后一个节点。
2.调整指针:
将最右节点的右指针指向当前节点的右子树。
将当前节点的左子树移到右子树的位置。
将当前节点的左指针置为 null。
3.移动到下一个节点:
每次处理完一个节点后,current 指针移动到当前节点的右子树。
时间复杂度:O(n),每个节点最多被访问两次。
空间复杂度:O(1),不使用额外的存储空间。
下面通过一个具体的例子来模拟原地算法(莫里斯遍历)的过程:
初始状态
1
/ \
2 5
/ \ \
3 4 6
复制代码
current 指向根节点 1
第一步:处理节点 1
检查左子树:节点 1 有左子树,左子树的根是 2。
找到左子树的最右节点:从 2 开始,向右走,找到最右节点 4。
调整指针:
将 4 的右指针指向 1 的右子树(即 5)。
将 1 的左子树移到右子树的位置。
将 1 的左指针置为 null。
调整后的状态:
1
\
2
/ \
3 4
\
5
\
6
复制代码
current 移动到 2
第二步:处理节点 2
检查左子树:节点 2 有左子树,左子树的根是 3。
找到左子树的最右节点:从 3 开始,向右走,没有右节点,最右节点是 3。
调整指针:
将 3 的右指针指向 2 的右子树(即 4)。
将 2 的左子树移到右子树的位置。
将 2 的左指针置为 null。
调整后的状态:
1
\
2
\
3
\
4
\
5
\
6
复制代码
current 移动到 3
第三步:处理节点 3
检查左子树:节点 3 没有左子树。
移动到右子树:current 移动到 3 的右子树,即 4。
第四步:处理节点 4
检查左子树:节点 4 没有左子树。
移动到右子树:current 移动到 4 的右子树,即 5。
第五步:处理节点 5
检查左子树:节点 5 没有左子树。
移动到右子树:current 移动到 5 的右子树,即 6。
第六步:处理节点 6
检查左子树:节点 6 没有左子树。
移动到右子树:current 移动到 6 的右子树,但 6 没有右子树,所以 current 变为 null,结束循环。
最终状态
1 -> 2 -> 3 -> 4 -> 5 -> 6
Java 代码实现:
class Solution {
public void flatten(TreeNode root) {
TreeNode current = root;
while (current != null) {
if (current.left != null) {
// 找到左子树的最右节点
TreeNode pre = current.left;
while (pre.right != null && pre.right != current) {
pre = pre.right;
}
if (pre.right == null) {
// 将当前节点的右子树接到左子树的最右节点
pre.right = current.right;
// 将左子树移到右子树的位置
current.right = current.left;
// 将左子树置为 null
current.left = null;
}
}
// 移动到下一个节点
current = current.right;
}
}
}
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
LeetCode
算法
进阶
二叉
展开
相关帖子
C++算法算法训练第十一天
同学!你见过会“流血”的算法吗?C++深搜遍历图的每条路径可视化程序!
C++算法算法训练第十二天
剑指offer-71、剪绳子(进阶版)
SpringBoot进阶教程(八十九)rabbitmq长链接及域名TTL,多机房切换配置重连能力
约瑟夫问题模拟算法可视化程序_C++精灵库算法可视化程序
浅谈逆序对在算法竞赛中的具体运用
26牛客寒假算法训练营1题解
浅析二叉树、B树、B+树和MySQL索引底层原理
收入写RAFT算法(一)Leader选举
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
C++算法算法训练第十一天
10
559
表弊捞
2026-01-28
业界
同学!你见过会“流血”的算法吗?C++深搜遍历图的每条路径可视化程序!
9
870
瞿佳悦
2026-01-30
安全
C++算法算法训练第十二天
9
575
志灿隐
2026-02-02
安全
剑指offer-71、剪绳子(进阶版)
10
171
梅克
2026-02-03
业界
SpringBoot进阶教程(八十九)rabbitmq长链接及域名TTL,多机房切换配置重连能力
10
638
醋辛
2026-02-03
业界
约瑟夫问题模拟算法可视化程序_C++精灵库算法可视化程序
7
465
绘纵
2026-02-04
业界
浅谈逆序对在算法竞赛中的具体运用
11
292
宛蛲
2026-02-05
安全
26牛客寒假算法训练营1题解
6
533
陈兰芳
2026-02-05
业界
浅析二叉树、B树、B+树和MySQL索引底层原理
11
621
岳娅纯
2026-02-06
业界
收入写RAFT算法(一)Leader选举
2
65
扈季雅
2026-02-12
回复
(30)
萨瑞饨
2025-11-18 14:16:33
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
接快背
2025-12-4 05:28:53
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
岳娅纯
2025-12-17 15:42:12
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享,学习下。
这帜
2025-12-24 19:17:01
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
赫连如冰
2025-12-27 07:31:29
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
支智敏
2026-1-11 14:36:03
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个有用。
寥唏
2026-1-12 11:39:53
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
任娅翠
2026-1-13 09:57:26
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
溧久苟
2026-1-14 18:16:39
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
收藏一下 不知道什么时候能用到
梭净挟
2026-1-16 00:00:54
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
驼娑
2026-1-19 11:06:07
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
过来提前占个楼
羊舌正清
2026-1-20 17:25:57
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
赖秀竹
2026-1-21 20:48:50
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
判涔
2026-1-24 01:38:01
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
龙玮奇
2026-1-27 08:29:42
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
滤冽
2026-1-28 10:00:04
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
拓炊羡
2026-1-30 03:55:27
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
全叶农
2026-1-30 06:34:38
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
觐有
2026-2-4 06:33:11
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
问答
代码
软件
签约作者
程序园优秀签约作者
发帖
辖瑁地
2026-2-4 06:33:11
关注
0
粉丝关注
22
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9899
6
韶又彤
9918
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9884
10
遗憩
10006
查看更多
今日好文热榜
77
[LKD/Linux 内核] 关于对 current_thread_i
6
[LKD/Linux 内核] 关于对 current_thread_i
5
[LKD/Linux 内核] 关于对 current_thread_i
536
杂题选做(3)
4
9、PipedInputStream和PipedOutputStream的
752
凸优化数学基础笔记(五):极小值点的判定
856
【节点】[MainLightRealtimeShadow节点]原
11
【渗透测试】HTB靶场之WingData 全过程wp
381
2023年电赛国赛经历
534
从零开始学Flink:实时数仓与维表时态Join
987
Stanford-CS336-Lecture-01 学习理解
663
FastAPI实战:WebSocket长连接保持与心跳机
361
FPGA使用镜像加载技术来切换运行中的比特流
405
赋予 AI Agent “无限续航”:语义保护型上
407
企业健身房器材配置方案:拒绝纸上谈兵,上
4
读人工智能全球格局:未来趋势与中国位势09