2016-12-09 6 views
0

ファイルのバイト[]からハフマンツリーを作成して、それを圧縮しようとしています。 BitSequenceを作成するには、バイトのHashMapと、ノードへのパスに相当する対応する文字列値を作成します。手作業で作業するときは、私のプログラムよりもずっと長いBitSequenceの長さを取得しています。ここでバイト値のHashMapを作成し、私のコードは、そのノードのバイトの値がされている。ハフマンノードへのパスを取得する

public static HashMap<Byte, String> getPath(Node n) 
    { 
    HashMap<Byte, String> map = new HashMap<Byte, String>(); 
    buildPath(n, "", map); 
    return map; 


    } 
    public static void buildPath(Node n, String s, HashMap<Byte, String> map) { 
    if(n != null) 
    { 
    if (n.left != null){ 
     buildPath(n.left, s+"0", map); 
    } 

    if (n.right != null){ 
    buildPath(n.right, s+"1", map); 
    } 
    if(n.left == null && n.right == null) 
    { 
    map.put(bytes, s); 
    return; 
    } 
    } 
    return; 
    } 

私は、ファイルから元のバイト配列を経由してのハフマンパスを追加するために生成されたHashMapを使います私はハフマンツリー自体で圧縮して、後で解読できるようにするシーケンスです。パスを生成する方法にエラーがありますか、または私の問題が別の場所にある可能性がありますか?

答えて

0

あなたのメソッドは静的なので、可変バイトも想定しています。それはあなたのHashMapにバイト値を入れず、代わりにnullをそこに入れておきます。統計を取り除き、バイト値をマップに正しく入れる必要があります。それをプライベートにして、それを返すgetByte()のようなメソッドを作るか、単純にバイトをpublicにして、あなたが使っているオブジェクトであればそれを呼び出すことができます。

関連する問題