【LeetCode】二叉树展开为链表(dfs)
力扣 二叉树展开为链表(dfs)
题目链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/
题目的意思是按照其先序遍历的顺序将二叉树展开为链表,要求使用O(1)的内存空间,所以先排除先序遍历出存储起来再构造链表的方法
根据观察,应该是dfs,分为三步:
- 第一步,将根节点的左子树展开为链表
- 第二步,将根节点的右子树展开为链表
- 第三步,将根节点左子树最右边的节点的右孩子指向根节点的右子树
为什么第三步需要这么指向?因为根据先序遍历的性质,其就应该这么指向!
第三步也可以理解为将根节点右子树放在根节点左子树的最右边!
- 当以2为根节点时,将2的左子树最右边的节点3指向2的右子树4,所以形成了2->3->4
- 当5为根节点时,5没有左子树,不用修改指向,所以还是5->6
- 最后当1为根节点时,将1的左子树的最右边的节点4指向1的有子树5->6
func dfs(root *TreeNode){
if root==nil{
return
}
// 让左右子树分别变成链表
dfs(root.Left)
dfs(root.Right)
// 保存左右子树
right:=root.Right
left:=root.Left
// 将左子树放到其右子树的位置,左子树位置置nil
root.Right=left
root.Left=nil
// 找到其左子树中最右边的节点,让该节点的右子树位置指向其右子树
for root.Right!=nil{
root=root.Right
}
root.Right=right
}
func flatten(root *TreeNode) {
dfs(root)
}
心之所向,素履以往
分类:
LeetCode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2019-03-10 腾讯笔试题 字符移位(字符串操作)
2019-03-10 华为笔试题 最高分是多少(线段树)
2019-03-10 华为笔试题 扑克牌大小(模拟,细节处理)
2019-03-10 华为笔试题 简答错误记录(字符串处理,好题!!!)