0

次のようにフォーマットされたバイナリツリーファイルがあります。

121
00
99
010
120
011
97
10
98
11

(ascii val) over (traversal code) のようにフォーマットされている場所。0 = 左、1 = 右

したがって、ASCII 値 121 は次のようなツリーに格納されます。

   -1
   /   
 -1       ...
 /
121

これを正しく構築するにはどうすればよいですか?

これは私が現在やっている方法です:

TreeNode root;

public Tree(Scanner input){
    while(input.hasNextLine()){
        int ascii = Integer(input.nextLine());
        String code = input.nextLine();
        root = insert(root, ascii, code);
    }
}

public TreeNode insert(TreeNode node, int ascii, String code){
    if(code == ""){
        return new TreeNode(ascii); //treenode is just data, left right
    }

    if(node == null)
        node = new TreeNode(-1);

    char c = code.charAt(0);

    if(c == '0')
        node.left = insert(node.left, ascii, code.substring(1));
    else if(c == '1')
        node.right = insert(node.right, ascii, code.substring(1));

    return node;
}

プレオーダー印刷を行ったところ、正しいように見えますが、ハフマンでエンコードされたファイルをデコードしようとすると、正しく表示されません。何か間違っていると思いますか?デコードしたものを投稿できますが、ここに投稿するには大きすぎるカスタム BitInputStream クラスを使用しているため、少し注意が必要です。

4

2 に答える 2

0

c が期待するコードであるかどうかを確認します。そうでない場合は、ノードを返すだけです。

if(c == '0')
    node.left = insert(node.left, ascii, code.substring(1));
else if(c == '1')
    node.right = insert(node.right, ascii, code.substring(1));
else
    throw new IllegalArgumentException();
于 2012-12-02T04:46:11.387 に答える
0

おそらく、. を使用して文字列を比較しようとしていることが原因です==

==オブジェクトへの参照が等しい[stringname].equals(otherstring)かどうかを比較し、メソッドは 2 つの文字列の内容が等しいかどうかを比較します。
たとえば、

String code = "hi";
String other = "hi";
code.equals(other);` 
returns true.
于 2016-12-10T05:39:44.583 に答える