2013-03-18 49 views
-1

這裏是我的函數,我將它與我的樹的根節點以及要在樹內找到的字符一起種下。它成功地返回了我要搜索的字母表,但它並沒有給我元素的路徑。我是一個有點卡住任何幫助將appriciated我創建了哈夫曼樹,但我在生成代碼時遇到了問題。

公共節點traversingTree(節點根,字符串charToFind){

Node tempRoot = root; 

    if (root != null){ 

     if (charToFind.equals(root.getAlphabet())) 
     { 
      //Another Point of consideration 
      System.out.print(root.getAlphabet()); 
      System.out.println(": "+pathCodes); 
      pathCodes.clear(); 
      return root; 
     } 
     Node result; 

     if ((result = traversingTree(root.leftChild, charToFind)) != null){ 

      pathCodes.add("0"); 
      return result; 

     }else 
      pathCodes.add("1"); 
      return traversingTree(root.rightChild, charToFind); 
     } 

     } 
    pathCodes.clear(); 

    return null; 

}

回答

1

你不說正是你做什麼得到,但看着你的代碼,你的右手遞歸就是在之前添加'1',繼續尋找合適的節點。但是,你在清除葉節點上的代碼,這將在所有'1'添加後發生。所以我希望你的代碼只包含'0',因爲在遞歸之後'0'被附加

此外,我懷疑,因爲你正在添加字符的方式回up樹,代碼將回到前面。

在重新考慮遞歸時,我會推薦而不是使用像這樣的霍夫曼樹。搜索代碼是非常低效的 - 我建議遍歷樹一次,建立一個字母+代碼表,然後簡單地索引到那裏。

優選地,僅使用該樹來計算代碼長度,並且使用規範編碼來生成代碼。