簡體   English   中英

HuffmanCode Java實例變量分配了樹,保持為空

[英]HuffmanCode Java instance variable assigned a tree, remains empty

我正在編寫用於創建HuffmanCode程序的遍歷方法,由於某種原因,我在遍歷方法中構建的映射不會分配給實例變量codeMap 我已經在控制台中使用字符串輸出測試了方法的過程- traversal正確地構建了tree ,但是當我分配時

`codeMap = traversal(root,s);`

在我的構造函數中,codeMap保持為空; 當我測試時返回true

`codeMap.isEmpty()`. 

為什么codeMap不接受返回的地圖? 我正在使用的root變量freqMap和PriorityQueue在構造函數中也可以正常工作。 這是我的構造函數/實例變量:

TreeNode root;
Map<Character,String> codeMap;
Map<Character,Double> freqMap;
HuffmanCode(Map<Character,Double> freqMap){
   this.freqMap = freqMap;
   PriorityQueue<TreeNode> queue = new PriorityQueue<TreeNode>(new NodeComparator());
   for(Map.Entry<Character,Double> entry : freqMap.entrySet()){
     TreeNode temp = new TreeNode(entry.getKey(),entry.getValue());
     queue.add(temp);
   }
   while(queue.size() > 1){
     TreeNode t1 = queue.remove();
     TreeNode t2 = queue.remove();
     TreeNode node = new TreeNode(t1.freq + t2.freq, t1, t2);
     queue.add(node);
   }
   root = queue.remove();
   String s = ""; 
   codeMap = traversal(root,s);
}

和我的traversal方法:

public Map<Character,String> traversal(TreeNode node, String s){
  Map<Character,String> tree = new TreeMap<Character,String>();
  if(!node.isLeaf()){
    traversal(node.left,s+"0");
    traversal(node.right,s+"1");
  }else{
    tree.put(node.letter,s);
  }
  return tree;
}

我在編譯或運行時沒有任何錯誤。 如果需要main方法,請告訴我,但問題出在此構造函數上。 我已經連續工作了幾個小時,無法找到codeMap保持空白的原因...

traversal()每個條目處,您都會創建一個新tree 返回到初始調用方法的唯一一個將始終為空,因為在該級別,該節點永遠不會是葉節點。

您必須實例化該樹一次,並將其作為參數傳遞給遞歸方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM