[AcWing]49. 二叉搜索树与双向链表
[AcWing]49. 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点,只能调整树中结点指针的指向。
注意:
- 需要返回双向链表最左侧的节点。
例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。
数据范围
树中节点数量 [0,500]
。
算法思路
中序遍历的基本代码:
1 |
|
根据观察,考虑在二叉树的中序遍历的基础上,利用 pre
和 cur
来进行 双链表
的构建。
- 先找到
双链表
的第一个节点,它是中序遍历的第一个节点。 - 定义一个指针
cur
,指向当前处理的节点。 - 如果
cur
的左子树不为空,则递归处理左子树。 - 将
cur
与其前驱节点(即中序遍历中cur
的前一个节点)连接起来。 - 更新前驱节点为
cur
。 - 处理
cur
的右子树,重复步骤2-4。
代码实现
1 |
|
复杂度分析
- 时间复杂度
O(n)
:对于每个节点最多只会被访问两次,因此总的时间复杂度为O(n)
。 - 空间复杂度
O(n)
:在最坏情况下,退化成单链表,空间复杂度为O(n)
。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Phbeats-Blog!
评论