📄 rehuffman.java
字号:
import structure.*;
import java.util.Iterator;
import java.io.*;
public class Rehuffman
{public static void main(String args[])
{ String s="";
try{
FileReader fr = null;
fr = new FileReader("C:/hfmTree.txt");
//System.out.println(fr);
BufferedReader br=new BufferedReader(fr);
//System.out.println(br);
String Line = null;
Line = br.readLine();
//System.out.println(Line);
while(Line!=null){
s=Line;
Line=null;
br.close();
fr.close();
}
//System.out.println(s);
}catch(IOException e1){
e1.printStackTrace();
}
List freq = new SinglyLinkedList();
for(int i=0;(2*i+1)<=s.length()-1;i++)
{char t=s.charAt(2*i);
int t1=Integer.parseInt(t+"");
char ch=s.charAt(2*i+1);
leaf query=new leaf(ch,t1);
freq.addLast(query);
}
Iterator li = freq.iterator();
OrderedList trees = new OrderedList();
while (li.hasNext())
{
trees.add(new huffmanTree((leaf)li.next()));
}
Iterator ti = trees.iterator();
while (trees.size() > 1)
{
ti = trees.iterator();
huffmanTree smallest = (huffmanTree)ti.next();
huffmanTree small = (huffmanTree)ti.next();
trees.remove(smallest);
trees.remove(small);
trees.add(new huffmanTree(smallest,small));
}
ti = trees.iterator();
Assert.condition(ti.hasNext(),"Huffman tree exists.");
huffmanTree encoding = (huffmanTree)ti.next();
String r="";
int index=0;
char c;
try
{BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
r=in.readLine();
c=r.charAt(index);}
catch(IOException exp){}
BinaryTree temp2;
temp2=encoding.root;
BinaryTree record=new BinaryTree("");
for(int i=0;i<=r.length()-1;i++)
{char x=r.charAt(i);
if(x=='0'){if(temp2.left()!=null) {temp2=temp2.left();
if(temp2.value()!="si"){leaf z=(leaf)temp2.value();
System.out.print(z.ch);
System.out.print("\t");
record=temp2;
temp2=encoding.root;}
else record=temp2;continue;}}
else if(x=='1'){if(temp2.right()!=null) {temp2=temp2.right();
if(temp2.value()!="si"){leaf z=(leaf)temp2.value();
System.out.print(z.ch);
System.out.print("\t");
record=temp2;
temp2=encoding.root;}
else record=temp2;continue;}}
else if((x!='0')&&(x!='1')) {System.out.print("\n");
System.out.print(" 输入有误!");break;}
}
if(record.value()=="si") {System.out.print("\n");System.out.print(" 输入有误!");}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -