11-14.1 P114.二叉树展开为链表
题目描述
给你二叉树的根结点 root ,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。 - 展开后的单链表应该与二叉树 先序遍历 顺序相同。
示例 1:
输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [0]
输出:[0]
题解
因为是前序遍历,转换为链表的话,链表的每一个结点的下一个结点必定是该结点的左孩子,而该结点的右孩子就要排在左孩子的下一个结点。
代码
var flatten = function(root){
while(root){
if(root.left === null){
root = root.right
}else{
let temp = root.left
while(temp.right){
temp = temp.right
}
temp.right = root.right
root.right = root.left
root.left = null
root = root.right
}
}
}