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

Commit b3b4a63

Browse files
committed
Лабораторная 30.2
1 parent f770d1c commit b3b4a63

File tree

3 files changed

+131
-0
lines changed

3 files changed

+131
-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="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>23K1302</artifactId>
7+
<groupId>ru.mirea.practice</groupId>
8+
<version>2024.1</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
<artifactId>23K1302-p30.2</artifactId>
12+
<description>Задание 30.2</description>
13+
</project>
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package ru.mirea.practice.s0000001;
2+
3+
public class Ex {
4+
5+
static class Node {
6+
int data;
7+
Node left;
8+
Node right;
9+
10+
Node(int data) {
11+
this.data = data;
12+
this.left = null;
13+
this.right = null;
14+
}
15+
}
16+
17+
18+
private Node root;
19+
20+
public void insert(int data) {
21+
root = insertRec(root, data);
22+
}
23+
24+
private Node insertRec(Node node, int data) {
25+
if (node == null) {
26+
return new Node(data);
27+
}
28+
if (data < node.data) {
29+
node.left = insertRec(node.left, data);
30+
} else if (data > node.data) {
31+
node.right = insertRec(node.right, data);
32+
}
33+
return node;
34+
}
35+
36+
public void delete(int data) {
37+
root = deleteRec(root, data);
38+
}
39+
40+
private Node deleteRec(Node node, int data) {
41+
if (node == null) {
42+
return null;
43+
}
44+
if (data < node.data) {
45+
node.left = deleteRec(node.left, data);
46+
} else if (data > node.data) {
47+
node.right = deleteRec(node.right, data);
48+
} else {
49+
if (node.left == null) {
50+
return node.right;
51+
}
52+
if (node.right == null) {
53+
return node.left;
54+
}
55+
56+
node.data = findMin(node.right);
57+
node.right = deleteRec(node.right, node.data);
58+
}
59+
return node;
60+
}
61+
62+
private int findMin(Node node) {
63+
while (node.left != null) {
64+
node = node.left;
65+
}
66+
return node.data;
67+
}
68+
69+
public void printTree() {
70+
printInOrder(root);
71+
System.out.println();
72+
}
73+
74+
private void printInOrder(Node node) {
75+
if (node != null) {
76+
printInOrder(node.left);
77+
System.out.print(node.data + " ");
78+
printInOrder(node.right);
79+
}
80+
}
81+
82+
public void destroyTree() {
83+
root = null;
84+
}
85+
86+
public int getHeight() {
87+
return getHeightRec(root);
88+
}
89+
90+
private int getHeightRec(Node node) {
91+
if (node == null) {
92+
return 0;
93+
}
94+
return Math.max(getHeightRec(node.left), getHeightRec(node.right)) + 1;
95+
}
96+
97+
public static void main(String[] args) {
98+
Ex tree = new Ex();
99+
100+
int[] elements = {50, 30, 70, 20, 40, 60, 80, 10, 35, 65};
101+
for (int el : elements) {
102+
tree.insert(el);
103+
}
104+
105+
System.out.println("Создание дерева с 10 узлами:");
106+
tree.printTree();
107+
108+
tree.delete(30);
109+
System.out.println("Удаление узла 30:");
110+
tree.printTree();
111+
112+
System.out.println("Высота дерева: " + tree.getHeight());
113+
114+
tree.destroyTree();
115+
System.out.println("Дерево удалено.");
116+
}
117+
}

students/23K1302/pom.xml

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

0 commit comments

Comments
 (0)