Обход бинарного дерева
8064 단어 kotlinleetcodeeasyalgorithms
Binary Tree Inorder Traversal
Постановка задачи
Дана Корневая врешина бинарного дерева. Вернуть список всех вершин "по очереди".
Примеры входных данных
프라이머 1
Входные данные:
루트 = [1, 널, 2, 3]
결과:
[1, 3, 2]
예문 2
Входные данные:
루트 = []
결과:
[]
프라이머 3
Входные данные:
루트 = [1]
결과:
[1]
레슈니예
При обходе дерева "по очереди"необходимо сначала посетить левую дочернюю вершину дерева, затем - текущую, а после этого - праверю.
Решение по шаgamm
1) Заводим результирующий список
val res: MutableList<Int> = mutableListOf()
2) Создаем функцию помощник
private fun helper(node: TreeNode?, res: MutableList<Int>) {
if (node != null) {
helper(node.left, res)
res.add(node.`val`)
helper(node.right, res)
}
}
В функцию помощник необходимо передавать текущую вершину дерева и список результатов.
3) В функции сначала проверяем на null текущую вершину. Мы делаем рекурсивный вызов функции, а это является терминирующim условием.
4) Далее рекурсивно вызываем функцию
helper
на левой дочерней вершине.5) Затем добавляем значение текущей вершины в список результатов.
6) А потом рекурсвивно вызываем функцию
helper
на правой дочерней вершине.7) В конце основной функции возвращаем список результатов.
변동 사항
rassmortrim tак же две varиации этой задачи.
선주문
Binary Tree Preorder Traversal
Первая вариация, когда мы добавляем значение вершины в список ответов до обхода дочерних вершин. 4-6.
res.add(node.`val`)
helper(node.left, res)
helper(node.right, res)
4) Добавляем значение текущей вершины в список результатов.
5) Рекурсвивно вызываем функцию
helper
на левой дочерней вершине.6) Рекурсвивно вызываем функцию
helper
на правой дочерней вершине.후주문
Binary Tree Postorder Traversal
Во второй вариации необходимо добавлять значение вершины в ответ после посещения дочерних вершин. 4-6.
helper(node.left, res)
helper(node.right, res)
res.add(node.`val`)
4) Рекурсвивно вызываем функцию
helper
на левой дочерней вершине5) Рекурсвивно вызываем функцию
helper
на правой дочерней вершине6) Добавляем значение текущей вершины в список результатов
Оценка сложности
폴노예 레쉬니에
fun inorderTraversal(root: TreeNode?): List<Int> {
val res: MutableList<Int> = mutableListOf()
helper(root, res)
return res
}
private fun helper(node: TreeNode?, res: MutableList<Int>) {
if (node != null) {
helper(node.left, res)
res.add(node.`val`)
helper(node.right, res)
}
}
Reference
이 문제에 관하여(Обход бинарного дерева), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ivsivak/obkhod-binarnogho-dierieva-480텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)