leetcode在力扣 App 中打开
调试中...
调试中...
题目描述
题目描述
题解
题解
提交记录
提交记录
代码
代码
测试用例
测试用例
测试结果
测试结果
简单
相关标签
相关企业
提示

二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。

返回转换后的单向链表的头节点。

注意:本题相对原题稍作改动

 

示例:

输入: [4,2,5,1,3,null,6,0]
输出: [0,null,1,null,2,null,3,null,4,null,5,null,6]

提示:

  • 节点数量不会超过 100000。
通过次数
35.8K
提交次数
55.9K
通过率
64.1%


相关企业

提示 1
尝试递归解法。

提示 2
这样想:如果你有convertLeft和convertRight方法(它们可以把左右子树转换成双链表),你能使用它们把整个树转换成双链表吗?

提示 3
一旦你对递归算法有了一个基本的概念,就可能会陷入这种情况:有时你的递归算法需要返回链表的头部,有时它需要返回链表的尾部。解决这个问题有多种方法,想想不同的方法。

提示 4
要处理递归算法是返回链表的头节点还是尾节点,可以尝试传递一个参数作为标志。但这不会很好。问题是,当调用convert(current.left)时,你希望得到left链表的尾节点。这样就可以将链表的末尾与current连接。但是,如果current是其他节点的右子树,那么convert(current)需要返回链表的头节点(其实是current.left的头节点)。实际上,链表的头节点和尾节点你都需要。

提示 5
许多人在这一点上左右为难,不知道该怎么办。有时他们需要链表的头部,有时他们需要链表的尾部。给定的节点通常不知道它在convert调用中应返回什么。有时候,最简单的解决方案就是:总是同时返回这两个值。有什么方法可以做到这一点?

提示 6
可以通过多种方式返回链表的头部和尾部。可以返回一个双元素数组,可以定义一个新的数据结构来保存头节点和尾节点,还可以重用BiNode数据结构。如果你使用的语言(如Python)支持返回多个值,你就可以使用此功能。可以将这个问题作为一个循环链表来解决,即头节点的前一个指针指向尾部,然后在外部的函数中拆开循环链表。试试这些解决方案。你最喜欢哪个?为什么?

评论 (0)

《程序员面试金典(第 6 版)》独家授权
本书是原谷歌资深面试官的经验之作,帮助了许多想要加入脸书、苹果、谷歌等 IT 名企的求职者拿到 Dream offer。本专题的 100+ 编程面试题是在原书基础上精心挑选出来的,帮助你轻松应战 IT 名企技术面试。
© 2025 领扣网络(上海)有限公司
1 人在线
行 1,列 1
root =
[4,2,5,1,3,null,6,0]
4
2
5
...
3
6
点击查看完整的二叉树
Source