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

Commit ddb7f88

Browse files
committed
Лабораторная работа №30
1 parent 7256c25 commit ddb7f88

File tree

7 files changed

+165
-194
lines changed

7 files changed

+165
-194
lines changed

students/23K0815/23K0815-p30/src/main/java/ru/mirea/practice/s0000001/task1/BinaryTree.java

Lines changed: 0 additions & 99 deletions
This file was deleted.

students/23K0815/23K0815-p30/src/main/java/ru/mirea/practice/s0000001/task1/Node.java

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package ru.mirea.practice.s0000001.task1;
2+
3+
class SearchTree {
4+
private TreeNode root;
5+
6+
public SearchTree() {
7+
root = null;
8+
}
9+
10+
public void insert(int key) {
11+
root = insertNode(root, key);
12+
}
13+
14+
private TreeNode insertNode(TreeNode current, int key) {
15+
if (current == null) {
16+
current = new TreeNode(key);
17+
return current;
18+
}
19+
if (key < current.value) {
20+
current.leftChild = insertNode(current.leftChild, key);
21+
} else if (key > current.value) {
22+
current.rightChild = insertNode(current.rightChild, key);
23+
}
24+
return current;
25+
}
26+
27+
public void printTree() {
28+
inOrderTraversal(root);
29+
System.out.println();
30+
}
31+
32+
private void inOrderTraversal(TreeNode current) {
33+
if (current != null) {
34+
inOrderTraversal(current.leftChild);
35+
System.out.print(current.value + " ");
36+
inOrderTraversal(current.rightChild);
37+
}
38+
}
39+
40+
public void delete(int key) {
41+
root = deleteNode(root, key);
42+
}
43+
44+
private TreeNode deleteNode(TreeNode current, int key) {
45+
if (current == null) {
46+
return current;
47+
}
48+
49+
if (key < current.value) {
50+
current.leftChild = deleteNode(current.leftChild, key);
51+
} else if (key > current.value) {
52+
current.rightChild = deleteNode(current.rightChild, key);
53+
} else {
54+
if (current.leftChild == null) {
55+
return current.rightChild;
56+
} else if (current.rightChild == null) {
57+
return current.leftChild;
58+
}
59+
60+
current.value = getMinValue(current.rightChild);
61+
current.rightChild = deleteNode(current.rightChild, current.value);
62+
}
63+
return current;
64+
}
65+
66+
private int getMinValue(TreeNode current) {
67+
int minValue = current.value;
68+
while (current.leftChild != null) {
69+
minValue = current.leftChild.value;
70+
current = current.leftChild;
71+
}
72+
return minValue;
73+
}
74+
75+
public void clear() {
76+
root = clearAll(root);
77+
}
78+
79+
private TreeNode clearAll(TreeNode current) {
80+
if (current == null) {
81+
return null;
82+
}
83+
current.leftChild = clearAll(current.leftChild);
84+
current.rightChild = clearAll(current.rightChild);
85+
current = null;
86+
return current;
87+
}
88+
}
89+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package ru.mirea.practice.s0000001.task1;
2+
3+
class TreeNode {
4+
int value;
5+
TreeNode leftChild;
6+
TreeNode rightChild;
7+
8+
TreeNode(int key) {
9+
value = key;
10+
leftChild = rightChild = null;
11+
}
12+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package ru.mirea.practice.s0000001.task2;
2+
3+
import java.util.Map;
4+
import java.util.PriorityQueue;
5+
import java.util.TreeMap;
6+
7+
public abstract class HuffmanAlgorithm {
8+
9+
public static Map<Character, Integer> generateFrequencyMap(String input) {
10+
Map<Character, Integer> frequencyMap = new TreeMap<>();
11+
for (char character : input.toCharArray()) {
12+
frequencyMap.put(character, frequencyMap.getOrDefault(character, 0) + 1);
13+
}
14+
return frequencyMap;
15+
}
16+
17+
public static Map<Character, String> constructHuffmanTree(Map<Character, Integer> frequencyMap) {
18+
PriorityQueue<HuffmanTreeNode> priorityQueue = new PriorityQueue<>();
19+
for (Map.Entry<Character, Integer> entry : frequencyMap.entrySet()) {
20+
priorityQueue.add(new HuffmanTreeNode(entry.getKey(), entry.getValue()));
21+
}
22+
23+
while (priorityQueue.size() > 1) {
24+
HuffmanTreeNode leftNode = priorityQueue.poll();
25+
HuffmanTreeNode rightNode = priorityQueue.poll();
26+
HuffmanTreeNode parentNode = new HuffmanTreeNode('\0', leftNode.frequency + rightNode.frequency);
27+
parentNode.left = leftNode;
28+
parentNode.right = rightNode;
29+
priorityQueue.add(parentNode);
30+
}
31+
32+
Map<Character, String> huffmanCodes = new TreeMap<>();
33+
createHuffmanCodes(priorityQueue.peek(), "", huffmanCodes);
34+
35+
return huffmanCodes;
36+
}
37+
38+
public static void createHuffmanCodes(HuffmanTreeNode node, String code, Map<Character, String> huffmanCodes) {
39+
if (node != null) {
40+
if (node.character != '\0') {
41+
huffmanCodes.put(node.character, code);
42+
}
43+
createHuffmanCodes(node.left, code + "0", huffmanCodes);
44+
createHuffmanCodes(node.right, code + "1", huffmanCodes);
45+
}
46+
}
47+
48+
public static class HuffmanTreeNode implements Comparable<HuffmanTreeNode> {
49+
char character;
50+
int frequency;
51+
HuffmanTreeNode left;
52+
HuffmanTreeNode right;
53+
54+
HuffmanTreeNode(char character, int frequency) {
55+
this.character = character;
56+
this.frequency = frequency;
57+
}
58+
59+
@Override
60+
public int compareTo(HuffmanTreeNode other) {
61+
return Integer.compare(this.frequency, other.frequency);
62+
}
63+
}
64+
}

students/23K0815/23K0815-p30/src/main/java/ru/mirea/practice/s0000001/task2/HuffmanCoding.java

Lines changed: 0 additions & 64 deletions
This file was deleted.

students/23K0815/23K0815-p30/src/main/java/ru/mirea/practice/s0000001/task2/Node.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)