Рубрики
Без рубрики

623. Добавить один ряд в дерево (решение JavaScript)

Описание: Учитывая корень двоичного дерева, затем значение V и глубина D, вам нужно добавить … Tagged с алгоритмами JavaScript.

Описание:

Учитывая корень двоичного дерева, затем значение V и глубины D, вам необходимо добавить ряд узлов со значением V на заданной глубине d. Корневой узел находится на глубине 1.

Правило добавления: Учитывая положительную глубину целого числа D, для каждого не нулевого дерева узлы n n глубиной d-1 создайте два узла дерева со значением V в качестве корня левого подтерею N и правого подтерею. И оригинальный левый поддерек 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);
    }
}

Оригинал: “https://dev.to/cod3pineapple/623-add-one-row-to-tree-javascript-solution-1oga”