Сложность: medium
Учитывая корень бинарного дерева и два целых числа val и depth, добавьте ряд узлов со значением val на заданную глубину depth. Обратите внимание, что корневой узел находится на глубине 1. Правило добавления таково: учитывая целое число depth, для каждого ненулевого узла дерева cur на глубине depth - 1 создайте два узла дерева со значением val в качестве левого поддерева корня cur и правого поддерева корня.
Оригинальное левое поддерево cur должно быть левым поддеревом нового корня левого поддерева. Оригинальное правое поддерево cur должно быть правым поддеревом нового корня правого поддерева. Если глубина == 1, то есть глубина - 1 вообще не существует, создайте узел дерева со значением val как новый корень всего оригинального дерева, а оригинальное дерево - левое поддерево нового корня.
Пример:
Input: root = [4,2,6,3,1,5], val = 1, depth = 2
Output: [4,1,1,2,null,null,6,3,1,5]
👨💻 Алгоритм:
1⃣Если depth равна 1, создайте новый корень со значением val и сделайте текущий корень левым поддеревом нового корня.
2⃣Используйте обход в ширину (BFS) для поиска всех узлов на глубине depth - 1.
3⃣Для каждого узла на глубине depth - 1, вставьте новые узлы со значением val в качестве левого и правого поддеревьев, сохраняя исходные поддеревья.
😎 Решение:
function TreeNode(val, left, right) {
this.val = (val === undefined ? 0 : val)
this.left = (left === undefined ? null : left)
this.right = (right === undefined ? null : right)
}
function addOneRow(root, val, depth) {
if (depth === 1) {
return new TreeNode(val, root, null);
}
const queue = [root];
let currentDepth = 1;
while (queue.length > 0) {
if (currentDepth === depth - 1) {
for (const node of queue) {
node.left = new TreeNode(val, node.left, null);
node.right = new TreeNode(val, null, node.right);
}
break;
}
currentDepth++;
const nextQueue = [];
for (const node of queue) {
if (node.left !== null) {
nextQueue.push(node.left);
}
if (node.right !== null) {
nextQueue.push(node.right);
}
}
queue.length = 0;
queue.push(...nextQueue);
}
return root;
}Ставь 👍 и забирай 📚 Базу знаний
