@@ -8,6 +8,8 @@ public class HuffmanTree {
88
99 public static void main (String [] args ) {
1010 String s = "abracadabra" ;
11+ System .out .println (s );
12+
1113 Map <Character , Integer > map = ListOfFrequencies (s );
1214
1315 for (Map .Entry entry : map .entrySet ()) {
@@ -17,10 +19,8 @@ public static void main(String[] args) {
1719 System .out .println ();
1820 System .out .println ();
1921
20-
21- HuffmanTree tree = HuffmanTree .growTree (s );
22- Map <Character , String > table = tree .createTable (tree .parent );
23-
22+ Node tree = HuffmanTree .growTree (s );
23+ Map <Character , String > table = createTable (tree );
2424
2525 for (Map .Entry entry : table .entrySet ()) {
2626 System .out .println ("key = " + entry .getKey () + " Val = " + entry .getValue ());
@@ -36,34 +36,28 @@ public Node getParentNode() {
3636 }
3737
3838 private static Map <Character , Integer > ListOfFrequencies (String s ) {
39- Map <Character , Integer > map = new HashMap <>();
39+ Map <Character , Integer > listOfRepetition = new HashMap <>();
4040 char [] characters = s .toCharArray ();
41- for (int i = 0 ; i < characters .length ; i ++) {
42- char aChar = characters [i ];
43- if (map .containsKey (aChar )) {
44- Integer count = map .get (aChar ) + 1 ;
45- map .put (aChar , count );
41+ for (char aChar : characters ) {
42+ if (listOfRepetition .containsKey (aChar )) {
43+ Integer count = listOfRepetition .get (aChar ) + 1 ;
44+ listOfRepetition .put (aChar , count );
4645 } else {
47- map .put (aChar , 1 );
46+ listOfRepetition .put (aChar , 1 );
4847 }
4948 }
5049
51- List <Map .Entry <Character , Integer >> list = new LinkedList <>(map .entrySet ());
52-
53- //Sorting witch Comparator
54- //LamBadAss
50+ List <Map .Entry <Character , Integer >> list = new LinkedList <>(listOfRepetition .entrySet ());
5551 Collections .sort (list , (Map .Entry <Character , Integer > o1 , Map .Entry <Character , Integer > o2 ) ->
5652 o1 .getValue ().compareTo (o2 .getValue ()));
57-
58- map = new LinkedHashMap <>();
53+ listOfRepetition = new LinkedHashMap <>();
5954 for (Map .Entry <Character , Integer > entry : list ) {
60- map .put (entry .getKey (), entry .getValue ());
55+ listOfRepetition .put (entry .getKey (), entry .getValue ());
6156 }
62-
63- return map ;
57+ return listOfRepetition ;
6458 }
6559
66- public static HuffmanTree growTree (String s ) {
60+ public static Node growTree (String s ) {
6761
6862 Map <Character , Integer > nodeSet = HuffmanTree .ListOfFrequencies (s );
6963
@@ -92,116 +86,26 @@ public static HuffmanTree growTree(String s) {
9286 }
9387
9488 Node root = queue .poll ();
95- return new HuffmanTree ( root ) ;
89+ return root ;
9690 }
9791
9892 public static Map <Character , String > createTable (Node node ) {
9993 Map <Character , String > table = new LinkedHashMap <>();
100- treeTraversalforCreateTable (table , node , "" );
94+ treeTraversalForCreateTable (table , node , "" );
10195 return table ;
10296 }
10397
104- private static void treeTraversalforCreateTable (Map <Character , String > table , Node node , String s ) {
98+ private static void treeTraversalForCreateTable (Map <Character , String > table , Node node , String s ) {
10599
106100 if (!node .isLeaf ()) {
107101// System.out.println(node.getChars());
108- treeTraversalforCreateTable (table , node .getLeftNode (), s + node .getLeftNode ().getCode ());
109- treeTraversalforCreateTable (table , node .getRightNode (), s + node .getRightNode ().getCode ());
102+ treeTraversalForCreateTable (table , node .getLeftNode (), s + node .getLeftNode ().getCode ());
103+ treeTraversalForCreateTable (table , node .getRightNode (), s + node .getRightNode ().getCode ());
110104 } else {
111105 node .setLeafCode (s );
112106 table .put (node .getSymbol (), node .getCode ());
113107 }
114108 }
115109
116110
117- public static class Node {
118-
119- private Node leftNode ;
120- private Node rightNode ;
121- private boolean isRoot ;
122- private boolean isFirst ;
123- private int freq ;
124- private String code ;
125- private String chars ;
126- private Character symbol ;
127-
128- private Node (Node left , int freq , Node right ) {
129- this .leftNode = left ;
130- this .rightNode = right ;
131- this .freq = freq ;
132- }
133-
134- private Node (Node left , int freq , Node right , Character symbol ) {
135- this .leftNode = left ;
136- this .rightNode = right ;
137- this .freq = freq ;
138- this .chars = symbol .toString ();
139- this .symbol = symbol ;
140-
141- }
142-
143- public Character getSymbol () {
144- return symbol ;
145- }
146-
147- public void setChars (String s ) {
148- this .chars = s ;
149- }
150-
151- public String getChars () {
152- return chars ;
153- }
154-
155- public static Node createLeaf (Map .Entry <Character , Integer > symbol ) {
156- return new Node (null , symbol .getValue (), null , symbol .getKey ());
157- }
158-
159- public static Node createNode (Node left , int freq , Node right ) {
160- return new Node (left , freq , right );
161- }
162-
163- public String getCode () {
164- return code ;
165- }
166-
167- public void setCode (String code ) {
168- if (code .equals ("1" ) || code .equals ("0" )) {
169- this .code = code ;
170- // return this;
171- } else throw new IllegalStateException ("this wrong code type 0 or 1" );
172- }
173-
174- public void setLeafCode (String code ) {
175- if (isLeaf ()) {
176- this .code = code ;
177- }
178- }
179-
180- public boolean isLeaf () {
181- return leftNode == null && rightNode == null && !(chars .isEmpty ());
182- }
183-
184- public Node setLeftNode (Node leftNode ) {
185- this .leftNode = leftNode ;
186- return this ;
187- }
188-
189- public Node setRightNode (Node rightNode ) {
190- this .rightNode = rightNode ;
191- return this ;
192- }
193-
194- public Node getLeftNode () {
195- return leftNode ;
196- }
197-
198- public Node getRightNode () {
199- return rightNode ;
200- }
201-
202- public Integer getFreq () {
203- return freq ;
204- }
205-
206- }
207111}
0 commit comments