日期: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