Пример:
nums1 = [1,2,3,4,5], nums2 = [1,2,3,4,5,6,7]#figure #binarysearch
Please open Telegram to view this post
VIEW IN TELEGRAM
Бинарные деревья широко используются для хранения, обработки и обхода данных, таких как выражения, файловые системы или структура HTML-страниц. Например: дерево принятия решений в игре (если "нет" — налево, если "да" — направо).
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}Такое упорядочивание позволяет быстро искать, добавлять и удалять значения.
#binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Рекурсия — это когда функция вызывает сама себя, чтобы решить задачу по частям.
Ты повторяешь одно и то же действие, уменьшая оставшийся объём работы. При этом обязательно должно быть условие остановки, иначе будешь снимать носки вечно 😄.
Каждый раз, когда функция вызывает саму себя, программа:
Затем программа начинает извлекать задачи из стека, в обратном порядке, и на каждом шаге сохраняет и возвращает результат.
public static int factorial(int n) {
if (n == 1) return 1; // базовый случай
return n * factorial(n - 1); // рекурсивный шаг
}
factorial(3)
→ 3 * factorial(2)
→ 3 * (2 * factorial(1))
→ 3 * (2 * 1) = 6#recursion
Please open Telegram to view this post
VIEW IN TELEGRAM
101. Symmetric Tree
Company:
Верните true, если оно является зеркальным отражением самого себя, то есть симметричным относительно своего центра
#leetcode101 | #easy #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
404. Sum of Left Leaves
Company:
Лист — это узел без потомков. Левый лист — это лист, который является левым потомком другого узла
#leetcode404 | #easy #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(h)
Please open Telegram to view this post
VIEW IN TELEGRAM
270. Closest Binary Search Tree Value
Company:
Верните значение в BST, которое ближе всего к target. Если есть несколько ответов, верните наименьший
#leetcode270 | #easy #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(h)
Space: O(1)
Please open Telegram to view this post
VIEW IN TELEGRAM
863. All Nodes Distance K in Binary Tree
Company:
Верните список значений всех узлов (в любом порядке), которые находятся на расстоянии k от целевого узла
#leetcode863 | #medium #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Time: O(n)
Space: O(n)
В итоге получаем эффективный алгоритм за O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
314. Binary Tree Vertical Order Traversal
Company:
Если два узла находятся в одной строке и столбце, порядок должен быть слева направо
#leetcode314 | #medium #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
В реализации bfs используем очередь Queue<Pair>, где Pair — это структура, содержащая сам узел и его номер столбца. Каждый раз, когда мы извлекаем узел из очереди, мы добавляем его значение в список соответствующего столбца в HashMap и помещаем в очередь его левого и правого детей с обновлёнными номерами столбцов.
private static class Pair {
TreeNode node;
int column;
public Pair(TreeNode node, int column) {
this.node = node;
this.column = column;
}
}
Это позволяет в конце пройти по столбцам от самого левого до самого правого, добавляя значения из HashMap в итоговый список в нужном порядке
Please open Telegram to view this post
VIEW IN TELEGRAM
99. Recover Binary Search Tree
Company:
Восстановите дерево, вернув узлам правильные значения
#leetcode99 | #medium #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
662. Maximum Width of Binary Tree
Company:
Ширина уровня определяется, как длина между самым левым и самым правым ненулевыми узлами, где нулевые узлы между ними, которые присутствовали бы в полном бинарном дереве, также учитываются при расчете длины
#leetcode662 | #medium #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Класс Pair:
private static class Pair {
TreeNode node;
int index;
public Pair(TreeNode node, int index) {
this.node = node;
this.index = index;
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
687. Longest Univalue Path
Company:
Длина пути между двумя узлами равна числу ребер между ними
#leetcode687 | #medium #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(h)
Please open Telegram to view this post
VIEW IN TELEGRAM
545. Boundary of Binary Tree
Company:
Граница бинарного дерева представляет собой объединение:
#leetcode545 | #medium #binarytree
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(n)
Если у текущего узла нет левого ребенка, переходим к правому, чтобы не пропустить крайние узлы в "перекошенных" деревьях
Принцип тот же, что и с левой границей: идем по краю (теперь справа), добавляем только не-листовые узлы.
Но есть важное отличие: чтобы сохранить правильный порядок (снизу вверх), мы добавляем значения после рекурсивного вызова, а не до него
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM