次のようにフォーマットされたバイナリツリーファイルがあります。
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 クラスを使用しているため、少し注意が必要です。