2012-12-02 34 views
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類。

回答

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(); 
+0

是的好評,謝謝。我知道這是不是問題,只有我的程序讀取/寫入文件。 – ceptno

0

也許是因爲您試圖使用==來比較字符串。

==比較對象的引用是否相等,而[stringname].equals(otherstring)方法比較兩個字符串的內容是否相等。
例如,你有

String code = "hi"; 
String other = "hi"; 
code.equals(other);` 
returns true.