前端算法 LeetCode 114.二叉树展开为链表

96 阅读1分钟

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

image.png

var flatten = function(root) {
    if(root === null) return
    flatten(root.left)
    flatten(root.right)
    
    // 先把原来的左右子树保存起来
    let left = root.left
    let right = root.right

    // 把左子树当作右子树
    root.left = null
    root.right = left

    // 将原先的右子树接到当前右子树的末端
    let p = root
    while(p.right){
        p = p.right
    }
    p.right = right
};