Описание:
Учитывая корень двоичного дерева, затем значение 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”