Сложность: medium
Дан корень бинарного дерева. Верните обход узлов дерева по уровням (то есть слева направо, уровень за уровнем).
Пример:
Input: root = [3,9,20,null,null,15,7]
Output: [[3],[9,20],[15,7]]
👨💻 Алгоритм:
1⃣Самый простой способ решения задачи — использование рекурсии. Сначала убедимся, что дерево не пустое, а затем рекурсивно вызовем функцию helper(node, level), которая принимает текущий узел и его уровень в качестве аргументов.
2⃣Эта функция выполняет следующее:
Выходной список здесь называется levels, и, таким образом, текущий уровень — это просто длина этого списка len(levels). Сравниваем номер текущего уровня len(levels) с уровнем узла level. Если вы все еще на предыдущем уровне, добавьте новый, добавив новый список в levels.
3⃣Добавьте значение узла в последний список в levels.
Рекурсивно обработайте дочерние узлы, если они не равны None: helper(node.left / node.right, level + 1).
😎 Решение:
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
}
}
class Solution {
func levelOrder(_ root: TreeNode?) -> [[Int]] {
var levels: [[Int]] = []
if root == nil {
return levels
}
func helper(_ node: TreeNode?, _ level: Int) {
guard let node = node else { return }
if level == levels.count {
levels.append([Int]())
}
levels[level].append(node.val)
helper(node.left, level + 1)
helper(node.right, level + 1)
}
helper(root, 0)
return levels
}
}Ставь 👍 и забирай 📚 Базу знаний