623 . 1行をツリーに追加する( JavaScriptソリューション)



説明
バイナリツリーのルートを与えられて、値vと深さdを与えられて、与えられた深さdで値vでノードの行を加える必要があります.
追加ルールは:正の整数深さdを与えられた場合、深さD - 1の各NULLツリーノードnに対して、値vをn個の左のサブツリールートと右のサブツリールートとして2つのツリーノードを作成します.そして、Nの元の左のサブツリーは新しい左のサブツリールートの左下のサブツリーでなければなりません、その元の右のサブツリーは新しい右下の木のルートの右のサブツリーでなければなりません.深さdが1であるならば、深さD - 1が全くないことを意味してください、そして、次に、値vで木のノードを全部の原木の新しいルートとしてつくってください、そして、元の木は新しいルートの左の部分木です.

解決方法
時間複雑性:O(n)
空間の複雑さ: O ( n )
// DFS approach
var addOneRow = function(root, v, d) {
    if (d === 1) {
        const node = new TreeNode(v);
        node.left = root;
        return node;
    }
    insert(v, root, 1, d);
    return root;
}

function insert(val, node, depth, n) {
    if (node === null)
        return;
    // Stop when we hit n - 1 and add the new nodes at the current level
    if (depth == n - 1) {
        let t = node.left;
        node.left = new TreeNode(val);
        node.left.left = t;
        t = node.right;
        node.right = new TreeNode(val);
        node.right.right = t;
    } 
    // Keep traversing down the tree if we are not on the correct level
    else {
        insert(val, node.left, depth + 1, n);
        insert(val, node.right, depth + 1, n);
    }
}