0

我有一个格式如下的二叉树文件:

121
00
99
010
120
011
97
10
98
11

它的格式类似于(ascii val)而不是(遍历代码)。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)方法比较两个字符串的内容是否相等。
例如,您有

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