LeetCode-in-All

114. Flatten Binary Tree to Linked List

Medium

Given the root of a binary tree, flatten the tree into a “linked list”:

Example 1:

Input: root = [1,2,5,3,4,null,6]

Output: [1,null,2,null,3,null,4,null,5,null,6]

Example 2:

Input: root = []

Output: []

Example 3:

Input: root = [0]

Output: [0]

Constraints:

Follow up: Can you flatten the tree in-place (with O(1) extra space)?

Solution

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {void} Do not return anything, modify root in-place instead.
 */
var flatten = function(root) {
    if (root !== null) {
        findTail(root)
    }
};

var findTail = function(root) {
    const left = root.left
    const right = root.right
    let tail

    if (left !== null) {
        tail = findTail(left)
        root.left = null
        root.right = left
        tail.right = right
    } else {
        tail = root
    }

    if (tail.right === null) {
        return tail
    } else {
        return findTail(tail.right)
    }
};

export { flatten }