二叉树展开为链表

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

  • 输入:root = [1,2,5,3,4,null,6]

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

  • 输入:root = []

  • 输出:[]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var flatten = function(root) {
while(root) {
if(!root.left) {
root = root.right;
} else {
let temp = root.left;
// 找到左节点的最右树节点
while(temp.right) temp = temp.right;
// 将树的右节点接在左节点的最右树节点上
temp.right = root.right;
// 右节点替换为左节点
root.right = root.left;
// 左节点的值置为null
root.left = null;
// 开始下一次遍历
root = root.right;
}
}
};