114. 二叉树展开为链表

日期:7.22

用时:44min

是否独立通过:在AI的提示下通过

题目:给你二叉树的根结点 root ,请你将它展开为一个单链表:

  • 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
  • 展开后的单链表应该与二叉树 先序遍历 顺序相同。

思路:dfs(root) 返回展开后的尾节点;先保存原左右子树头节点,再递归展开左右子树,若存在左子树,就把左链表插到 root 和原右链表之间,最后按rightTail -> leftTail -> root 的优先级返回尾节点。

错因:只做了 root.right = root.left,相当于用左子树覆盖了原右子树;但没有执行 leftTail.right = rightHead,导致原右子树丢失。

tips:

以下是DLR遍历展开的结果

root:1

left:2->3->4

right:5->6

拼接的伪代码:

if:leftHead!=null

root.right=leftHead

root.left=null

leftTail.right=rightHead

最后返回尾节点时,也要分情况:

rightTail!=null return rightTail

leftTail!=null return leftTail

return root

相关推荐
凉茶钱7 分钟前
list:哨兵节点,const_iterator 和 const iterator的区别与迭代器失效
数据结构·c++·list
敲代码的苦132 小时前
头歌数据结构-排序的实现及其应用
数据结构
有同事要进步2 小时前
Leecode第68题:x的平方根
java·数据结构·算法
Pniubi3 小时前
HashMap扩容全流程
java·开发语言·数据结构
by209991 天前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Code_Solitude1 天前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
Pniubi1 天前
快速排序(力扣基础)(递归)
java·数据结构·算法
lojox1 天前
C++ 手写 STL list(双向循环链表)原理剖析与实现
c++·链表·list
inrichtt1 天前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger1 天前
数据结构——选择排序
数据结构·算法·排序算法