![](/user_photo/_userpic.png)
Приложение б Листинг программы задания №2
import java.util.Random;
public class Main
{
static class Node {
int value;
Node left, right;
public Node(int item) {
value = item;
left = right = null;
}
}
static class Tree {
Node root;
Tree() {
root = null;
}
void insert(int value) {
root = insertNode(root, value);
}
Node insertNode(Node root, int value) {
if (root == null) {
root = new Node(value);
return root;
}
if (value < root.value) {
root.left = insertNode(root.left, value);
} else if (value > root.value) {
root.right = insertNode(root.right, value);
}
return root;
}
Node find(int value) {
return findNode(root, value);
}
Node findNode(Node root, int value) {
if (root == null || root.value == value) {
return root;
}
if (root.value > value) {
return findNode(root.left, value);
}
return findNode(root.right, value);
}
void remove(int value) {
root = removeNode(root, value);
}
Node removeNode(Node root, int value) {
if (root == null) {
return root;
}
if (value < root.value) {
root.left = removeNode(root.left, value);
} else if (value > root.value) {
root.right = removeNode(root.right, value);
} else {
if (root.left == null) {
return root.right;
} else if (root.right == null) {
return root.left;
}
root.value = minValue(root.right);
root.right = removeNode(root.right, root.value);
}
return root;
}
int minValue(Node root) {
int minValue = root.value;
while (root.left != null) {
minValue = root.left.value;
root = root.left;
}
return minValue;
}
}
public static void main(String[] args)
{
int n = 10000;
Random random = new Random();
Tree tree = new Tree();
// Генерация начального набора случайных данных
for (int i = 0; i < n; i++) {
tree.insert(random.nextInt(n));
}
int searchValue = random.nextInt(n);
// Оценка времени работы алгоритма поиска
long startTime = System.nanoTime();
tree.find(searchValue);
long endTime = System.nanoTime();
System.out.println("Время работы бинарного дерева: " + (endTime - startTime) + " нс");
// Оценка времени работы стандартной функции поиска
int[] array = new int[n];
for (int i = 0; i < n; i++) {
array[i] = random.nextInt(n);
}
startTime = System.nanoTime();
java.util.Arrays.sort(array); // Сортировка массива перед бинарным поиском
int index = java.util.Arrays.binarySearch(array, searchValue); // Использование стандартной функции поиска
endTime = System.nanoTime();
System.out.println("Время работы стандартной функции поиска: " + (endTime - startTime) + " нс");
// Сравнение времени работы алгоритмов
startTime = System.nanoTime();
tree.remove(searchValue);
endTime = System.nanoTime();
System.out.println("Время работы удаления элемента из бинарного дерева: " + (endTime - startTime) + " нс");
startTime = System.nanoTime();
if (index >= 0) {
array = removeElementFromArray(array, index);
}
endTime = System.nanoTime();
System.out.println("Время работы удаления элемента из массива: " + (endTime - startTime) + " нс");
}
private static int[] removeElementFromArray(int[] array, int index) {
int[] result = new int[array.length - 1];
System.arraycopy(array, 0, result, 0, index);
System.arraycopy(array, index + 1, result, index, array.length - index - 1);
return result;
}
}