在这个编程任务中,我们必须创建一个名为traverse的辅助方法,该方法由getCodes()调用。 它是遍历霍夫曼树的一种递归方法,并为树中每个叶节点的ArrayList添加一个代码记录。 非常感谢任何帮助我现在已经坚持了3个小时。
/* This method returns an ArrayList of the codes in the Huffman Tree.
* The Code class has a character and its corresponding encoding. In the
* tree, left edges are designated as 0 and right edges as 1.
*
* DO NOT CHANGE THIS METHOD, but you need to write the traverse method.
*/
public ArrayList<Code> getCodes() {
ArrayList<Code> code = new ArrayList<Code>();
if (root == null) return null;
traverse(code, root.left, "0");
traverse(code, root.right, "1");
return code;
}
/* Recursive method to traverse the Huffman tree, and for each leaf node,
* add a Code record to the ArrayList.
*/
private void traverse(ArrayList<Code> code, BinaryTreeNode<Letter> node,
String prefix) {
// TODO: Fill in this method
// base case
if(node==null) return;
//else traverse the left then right
if(node!=null){traverse(code,node.left, prefix);}
if(node!=null){traverse(code,node.right,prefix);}
code.add(node.getElement());
}
答案 0 :(得分:1)
traverse(code, node.getLeft(), prefix + "0");
traverse(code, node.getRight(), prefix + "1");
code.add(Code(node.getElement().getLetter(), prefix));
编辑:您从未更新前缀,并且您没有将正确的对象添加到arraylist。我知道这是你的家庭作业。