Сложность: 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 в качестве левого и правого поддеревьев, сохраняя исходные поддеревья.
😎 Решение:
class TreeNode {
var val: Int
var left: TreeNode?
var right: TreeNode?
init(_ val: Int, _ left: TreeNode? = nil, _ right: TreeNode? = nil) {
self.val = val
self.left = left
self.right = right
}
}
func addOneRow(_ root: TreeNode?, _ val: Int, _ depth: Int) -> TreeNode? {
if depth == 1 {
return TreeNode(val, root, nil)
}
var queue: [TreeNode] = []
if let root = root {
queue.append(root)
}
var currentDepth = 1
while !queue.isEmpty {
if currentDepth == depth - 1 {
for node in queue {
node.left = TreeNode(val, node.left, nil)
node.right = TreeNode(val, nil, node.right)
}
break
}
currentDepth += 1
var nextQueue: [TreeNode] = []
for node in queue {
if let left = node.left {
nextQueue.append(left)
}
if let right = node.right {
nextQueue.append(right)
}
}
queue = nextQueue
}
return root
}Ставь 👍 и забирай 📚 Базу знаний
