我已经能根据字符频率表生成哈夫曼树,也知道左边为"0",右边为"1",但是不知道怎样用代码来实现遍历树并返回有字符存在的节点的编码,能否按照下面的定义,给个实现的代码
//树的节点
class Node {
public int iFreq; //字符频率 public char cChracter;//字符 public Node leftChild;//左子树 public Node rightChild;//右子树 // -------------------------------------------------------------
public void displayNode() {
System.out.print("{" + iFreq + "," + cChracter + "}");
}
}
//哈夫曼树
class HufmanTree {
public Node root; public HufmanTree(Node next) {
root = next;
}
}

解决方案 »

  1.   

    答:很简单。参考代码:/*已经能根据字符频率表生成哈夫曼树,也知道左边为"0",右边为"1",但
     * 是不知道怎样用代码来实现遍历树并返回有字符存在的节点的编码,
     * 能否按照下面的定义,给个实现的代码 */class Node {
        public int iFreq; //字符频率    public char cChracter;//字符    public Node leftChild;//左子树    public Node rightChild;//右子树    // -------------------------------------------------------------
        public void displayNode() {
            System.out.print("{" + iFreq + "," + cChracter + "}");
        }
    }
    public class HufmanTree {
     public Node root;     public HufmanTree(Node next) {
            root = next;
        }
       
      //实现遍历树并返回有字符存在的节点的编码
     public void getHufmanCode()
     {
     getHufmanCode("",root);
     }
        
     //内部使用的递归遍历Hufman树并输出有字符存在的节点的编码
     private void  getHufmanCode(String path,Node root)
     {
     if(root==null) return ;
     //若是叶子结点,则输出它的编码
     if(root.leftChild==null && root.rightChild==null)
     {
     root.displayNode();
     System.out.println(" HufmanCode:"+path);
     return;
     }
     //左子树递归:左边结点编号是0
     if(root.leftChild!=null) getHufmanCode(path+"0", root.leftChild);
             //右子树递归:右边结点编号是1
     if(root.rightChild!=null) getHufmanCode(path+"1", root.rightChild);
     }  }