KS1_2_Projekt/Main.java

127 lines
3.1 KiB
Java

import java.util.HashMap;
import java.util.*;
public class Main
{
public static void test(String text)
{
Map<Character, Integer> zahlen = Zählen.countEachLetter(text);
Node wurzel = Node.erstellen(zahlen);
System.out.println();
System.out.println("Pre-Order Baum:");
printBaum(wurzel);
System.out.println();
System.out.println("Anzahl der Zeichen:");
Zählen.printZahl(zahlen);
System.out.println();
System.out.println("Binärcode der Zeichen:");
codes(text);
System.out.println();
decodierungBaum(codierung(text,wurzel), wurzel);
}
public static void printBaum(Node baum)
{
if(baum == null)return;
System.out.println("Buchstabe: " + baum.getBuchstabe() + ", Anzahl: " + baum.getAnzahl());
printBaum(baum.getLeft());
printBaum(baum.getRight());
}
public static void codes(String text)
{
Node wurzel = Node.erstellen(Zählen.countEachLetter(text));
HashMap<Character, String> codes = new HashMap<Character, String>();
generieren(codes,wurzel,"");
for (var entry : codes.entrySet())
{
System.out.println("->" + entry.getKey() + ", Code: " + entry.getValue());
}
}
public static void generieren(HashMap<Character, String> codes, Node node, String code)
{
if(node == null)return;
if(node.getLeft() == null && node.getRight() == null)
{
codes.put(node.getBuchstabe(), code);
return;
}
generieren(codes, node.getLeft(), code + "0");
generieren(codes, node.getRight(), code + "1");
}
public static String codierung(String text, Node wurzel)
{
HashMap<Character, String> codes = new HashMap<Character, String>();
if(wurzel.getLeft() == null && wurzel.getRight() == null)
{
codes.put(wurzel.getBuchstabe(), "0");
}
else
{
generieren(codes,wurzel,"");
}
String code = "";
for (int i=0; i<text.length();i++)
{
char b = text.charAt(i);
String c = codes.get(b);
code += c;
}
System.out.println("Huffman-Codierung: " + code);
return code;
}
public static String decodierungBaum(String code,Node baum)
{
Node current = baum;
String decoded = "";
for(int i =0;i<code.length();i++)
{
printBaum(current);
System.out.println();
if(current.getRight() == null && current.getLeft() == null)
{
decoded += current.getBuchstabe();
current = baum;
}
if(code.charAt(i) == '1')
{
current= baum.getRight();
}
if(code.charAt(i) == '0')
{
current = baum.getLeft();
}
}
System.out.println(decoded);
return decoded;
}
}