22. Реализовать простое двоичное дерево поиска
Условие задачи:
🔥 Реализовать простое двоичное дерево поиска (BST):
добавление элементов
обход в in-order (сначала левый, потом текущий, потом правый)
Пример 1
Вход:
[5, 3, 7, 2, 4, 6, 8]
Дерево:
5
/ \
3 7
/ \ / \
2 4 6 8
Результат in-order:
[2, 3, 4, 5, 6, 7, 8]
Пример 2
Вход:
[10, 5, 1, 7, 40, 50]
Дерево:
10
/ \
5 40
/ \ \
1 7 50
Результат in-order:
[1, 5, 7, 10, 40, 50]
Спойлеры к решению
Подсказки
🌳 Двоичное дерево поиска (Binary Search Tree) хранит меньшие значения слева, большие — справа.
📌 Для вставки используем рекурсивный метод
📌 Обход in-order позволяет получить отсортированную последовательность значений.
💡 Используй
📌 Для вставки используем рекурсивный метод
insertRec.📌 Обход in-order позволяет получить отсортированную последовательность значений.
💡 Используй
System.out.print() внутри рекурсивного обхода, чтобы увидеть структуру.Решение
public class BinaryTree {
static class Node {
int value;
Node left;
Node right;
Node(int value) {
this.value = value;
}
}
private Node root;
public void insert(int value) {
root = insertRec(root, value);
}
private Node insertRec(Node root, int value) {
if (root == null) return new Node(value);
if (value < root.value) root.left = insertRec(root.left, value);
else if (value > root.value) root.right = insertRec(root.right, value);
return root;
}
public void inOrderTraversal() {
inOrderRec(root);
}
private void inOrderRec(Node root) {
if (root != null) {
inOrderRec(root.left);
System.out.print(root.value + " ");
inOrderRec(root.right);
}
}
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(1);
tree.insert(4);
System.out.println("In-order traversal:");
tree.inOrderTraversal(); // Output: 1 3 4 5 7
}
}
📌 Что ты реализовал:
✅ Добавление элементов в бинарное дерево.
✅ Обход in-order (слева → текущий → справа).
✅ Рекурсивную структуру дерева.
✅ Пример работы — можно запустить и проверить.