Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit ecfacfb

Browse files
committed
Внезапные запчасти (работа 30 часть 2)
1 parent 03e008d commit ecfacfb

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package ru.mirea.practice.s23k0823.task1.task1.task2.part2;
2+
3+
class BinarySearchTree {
4+
Node root;
5+
6+
void insert(int key) {
7+
root = insertRec(root, key);
8+
}
9+
10+
Node insertRec(Node root, int key) {
11+
if (root == null) {
12+
root = new Node(key);
13+
return root;
14+
}
15+
if (key < root.key) {
16+
root.left = insertRec(root.left, key);
17+
} else if (key > root.key) {
18+
root.right = insertRec(root.right, key);
19+
}
20+
return root;
21+
}
22+
23+
void inorder() {
24+
inorderRec(root);
25+
}
26+
27+
void inorderRec(Node root) {
28+
if (root != null) {
29+
inorderRec(root.left);
30+
System.out.print(root.key + " ");
31+
inorderRec(root.right);
32+
}
33+
}
34+
35+
Node deleteNode(Node root, int key) {
36+
if (root == null) {
37+
return root;
38+
}
39+
40+
if (key < root.key) {
41+
root.left = deleteNode(root.left, key);
42+
} else if (key > root.key) {
43+
root.right = deleteNode(root.right, key);
44+
} else {
45+
if (root.left == null) {
46+
return root.right;
47+
} else if (root.right == null) {
48+
return root.left;
49+
}
50+
51+
root.key = minValue(root.right);
52+
root.right = deleteNode(root.right, root.key);
53+
}
54+
return root;
55+
}
56+
57+
int minValue(Node root) {
58+
int minv = root.key;
59+
while (root.left != null) {
60+
minv = root.left.key;
61+
root = root.left;
62+
}
63+
return minv;
64+
}
65+
66+
void clear() {
67+
root = null;
68+
}
69+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package ru.mirea.practice.s23k0823.task1.task1.task2.part2;
2+
3+
public abstract class Main {
4+
public static void main(String[] args) {
5+
BinarySearchTree bst = new BinarySearchTree();
6+
7+
int[] keys = {50, 30, 20, 40, 70, 60, 80, 10, 90, 5};
8+
for (int key : keys) {
9+
bst.insert(key);
10+
}
11+
12+
System.out.println("Содержимое дерева:");
13+
bst.inorder();
14+
System.out.println();
15+
16+
System.out.println("Удаление узла с ключом 20:");
17+
bst.root = bst.deleteNode(bst.root, 20);
18+
19+
System.out.println("Содержимое дерева после удаления:");
20+
bst.inorder();
21+
System.out.println();
22+
23+
bst.clear();
24+
System.out.println("Дерево очищено.");
25+
}
26+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package ru.mirea.practice.s23k0823.task1.task1.task2.part2;
2+
3+
class Node {
4+
int key;
5+
Node left;
6+
Node right;
7+
8+
public Node(int item) {
9+
key = item;
10+
left = right = null;
11+
}
12+
}

0 commit comments

Comments
 (0)