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

Commit f6d43eb

Browse files
authored
Merge pull request #605 from marina-devel/main
Лабораторная работа №31
2 parents 69368ae + 920da22 commit f6d43eb

File tree

5 files changed

+220
-0
lines changed

5 files changed

+220
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<artifactId>23K0346</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K0346-p31_31</artifactId>
12+
<description>Массивы</description>
13+
</project>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package ru.mirea.practice.s0000001.tasks;
2+
3+
class Node {
4+
int key;
5+
Node left;
6+
Node right;
7+
8+
public Node(int key) {
9+
this.key = key;
10+
}
11+
}
12+
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
package ru.mirea.practice.s0000001.tasks;
2+
3+
public class ProcessorTree {
4+
private Node root;
5+
6+
public void add(int key) {
7+
root = addRecursive(root, key);
8+
}
9+
10+
private Node addRecursive(Node node, int key) {
11+
if (node == null) {
12+
return new Node(key);
13+
}
14+
if (key < node.key) {
15+
node.left = addRecursive(node.left, key);
16+
} else if (key > node.key) {
17+
node.right = addRecursive(node.right, key);
18+
} else {
19+
System.out.println("Key " + key + " already exists.");
20+
}
21+
return node;
22+
}
23+
24+
public void delete(int key) {
25+
root = deleteRecursive(root, key);
26+
}
27+
28+
private Node deleteRecursive(Node node, int key) {
29+
if (node == null) {
30+
System.out.println("Key " + key + " not found.");
31+
return null;
32+
}
33+
if (key < node.key) {
34+
node.left = deleteRecursive(node.left, key);
35+
} else if (key > node.key) {
36+
node.right = deleteRecursive(node.right, key);
37+
} else {
38+
if (node.left == null && node.right == null) {
39+
return null;
40+
} else if (node.left == null) {
41+
return node.right;
42+
} else if (node.right == null) {
43+
return node.left;
44+
} else {
45+
Node smallestValue = findSmallestValue(node.right);
46+
node.key = smallestValue.key;
47+
node.right = deleteRecursive(node.right, smallestValue.key);
48+
}
49+
}
50+
return node;
51+
}
52+
53+
private Node findSmallestValue(Node node) {
54+
return node.left == null ? node : findSmallestValue(node.left);
55+
}
56+
57+
public void printVariant1() {
58+
if (root == null) {
59+
System.out.println("Tree is empty.");
60+
return;
61+
}
62+
int height = getHeight(root);
63+
for (int level = height; level >= 1; level--) {
64+
printLevel(root, level);
65+
}
66+
System.out.println();
67+
}
68+
69+
public void printVariant2() {
70+
if (root == null) {
71+
System.out.println("Tree is empty.");
72+
return;
73+
}
74+
int height = getHeight(root);
75+
for (int level = 1; level <= height; level++) {
76+
printLevel(root, level);
77+
}
78+
System.out.println();
79+
}
80+
81+
public void printVariant3() {
82+
printVariant3Recursive(root);
83+
System.out.println();
84+
}
85+
86+
private void printVariant3Recursive(Node node) {
87+
if (node != null) {
88+
printVariant3Recursive(node.left);
89+
System.out.print(node.key + " ");
90+
printVariant3Recursive(node.right);
91+
}
92+
}
93+
94+
public void printVariant6() {
95+
if (root == null) {
96+
System.out.println("Tree is empty.");
97+
return;
98+
}
99+
int height = getHeight(root);
100+
for (int level = 1; level <= height; level++) {
101+
System.out.print("Level " + level + ": ");
102+
printLevel(root, level);
103+
System.out.println();
104+
}
105+
}
106+
107+
private int getHeight(Node node) {
108+
if (node == null) {
109+
return 0;
110+
}
111+
return Math.max(getHeight(node.left), getHeight(node.right)) + 1;
112+
}
113+
114+
private void printLevel(Node node, int level) {
115+
if (node == null) {
116+
return;
117+
}
118+
if (level == 1) {
119+
System.out.print(node.key + " ");
120+
} else if (level > 1) {
121+
printLevel(node.left, level - 1);
122+
printLevel(node.right, level - 1);
123+
}
124+
}
125+
}
126+
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package ru.mirea.practice.s0000001.tasks;
2+
3+
import java.util.Scanner;
4+
5+
public final class ProcessorTreeApp {
6+
private ProcessorTreeApp() {
7+
throw new UnsupportedOperationException("Utility class");
8+
}
9+
10+
public static void main(String[] args) {
11+
ProcessorTree tree = new ProcessorTree();
12+
13+
try (Scanner scanner = new Scanner(System.in)) {
14+
while (true) {
15+
System.out.println("Menu:");
16+
System.out.println("1 - Add node");
17+
System.out.println("2 - Delete node");
18+
System.out.println("3 - Print variant 1 (bottom to top, left to right)");
19+
System.out.println("4 - Print variant 2 (top to bottom, left to right)");
20+
System.out.println("5 - Print variant 3 (left, root, right)");
21+
System.out.println("6 - Print variant 6 (levels with level numbers)");
22+
System.out.println("7 - Exit");
23+
System.out.print("Enter command: ");
24+
int command = scanner.nextInt();
25+
26+
switch (command) {
27+
case 1:
28+
System.out.print("Enter key to add: ");
29+
int keyToAdd = scanner.nextInt();
30+
tree.add(keyToAdd);
31+
break;
32+
33+
case 2:
34+
System.out.print("Enter key to delete: ");
35+
int keyToDelete = scanner.nextInt();
36+
tree.delete(keyToDelete);
37+
break;
38+
39+
case 3:
40+
tree.printVariant1();
41+
break;
42+
43+
case 4:
44+
tree.printVariant2();
45+
break;
46+
47+
case 5:
48+
tree.printVariant3();
49+
break;
50+
51+
case 6:
52+
tree.printVariant6();
53+
break;
54+
55+
case 7:
56+
System.out.println("Exiting program.");
57+
return;
58+
59+
default:
60+
System.out.println("Invalid command.");
61+
break;
62+
}
63+
}
64+
} catch (Exception e) {
65+
System.out.println("An error occurred: " + e.getMessage());
66+
}
67+
}
68+
}

students/23K0346/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
<module>23K0346-p29</module>
4545
<module>23K0346-p30.1</module>
4646
<module>23K0346-p30.2</module>
47+
<module>23K0346-p31_31</module>
4748
<module>23K0346-p32</module>
4849
</modules>
4950
</project>

0 commit comments

Comments
 (0)