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

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

思路

  1. 模拟链表,每次传递当前指针 cur 进行先序遍历
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var flatten = function (root) {
const handler = (node, cur) => {
if (!node) {
return cur
}
cur.right = node
cur = node
const { left, right } = cur
cur.left = null
cur = handler(left, cur)
cur = handler(right, cur)
return cur
}
const dummyRoot = new TreeNode()
handler(root, dummyRoot)
return dummyRoot.right
}