java - 霍夫曼树的遍历辅助方法

标签 java binary-search-tree traversal huffman-code tree-traversal

在此编程作业中,我们必须创建一个名为 traverse 的辅助方法,该方法由 getCodes() 调用。 它是一种递归方法,遍历哈夫曼树,并为树中的每个叶子节点添加一条 Code 记录到 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());
}

最佳答案

traverse(code, node.getLeft(), prefix + "0");

traverse(code, node.getRight(), prefix + "1");

code.add(Code(node.getElement().getLetter(), prefix));

编辑:您从未更新过前缀,并且没有将正确的对象添加到数组列表中。顺便说一句,我知道这是你的作业。

关于java - 霍夫曼树的遍历辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26878616/

相关文章:

java - 删除 LinearLayout 中子级之间的空间

algorithm - 遍历二叉搜索树

c++ - std::lower_bound 不专门用于红黑树迭代器是否有任何技术原因?

java - 二维数组的深度优先搜索

javascript - 获取 div 在层次结构中的位置

java - 使用 Apache Commons compress 创建 gzip 存档

java - 为什么 Java 对每种颜色都有两个颜色值?

java - 如何在apache storm中启动worker

c++ - 为什么在打印 BST 的前序遍历时我的程序什么都不做

javascript - 存储实时 htmlCollection 与迭代项目 ID 数组(和树遍历)的成本