2013-03-18 1 views
-1

내 함수는 다음과 같다. 내 트리의 루트 노드와 트리 안에있는 문자로 시드한다. 그것은 성공적으로 나에게 검색 할 알파벳을 돌려 주지만 엘리먼트에 대한 경로를 알려주지 않습니다. (노드 루트 문자열 charToFind을) 조금 도움이나는 호프만 나무를 만들었지 만 코드를 생성하는 데 문제가있다.

공공 노드 traversingTree을 appriciated 될 붙어 임 {

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'이 추가 된 후에 발생하는 리프 노드의 코드를 지 웁니다. 따라서 귀하의 코드에는 '0'만 포함될 것으로 예상됩니다. 이후에 '0'이 추가 된 후 재귀가 발생합니다.

또한 내가 길에서 문자를 추가 할 때 최대 트리까지 코드가 맨 앞에 표시됩니다.

재귀를 다시 생각하면서 어쨌든 이 아니고은 허프 먼 트리를 사용하는 것이 좋습니다. 코드를 검색하는 것은 매우 비효율적입니다. 한 번 트리를 탐색하고 알파벳 + 코드 표를 작성한 다음 색인을 생성하는 것이 좋습니다.

바람직하게는 트리를 사용하여 코드 길이를 계산하고 표준 인코딩을 사용하여 코드를 생성하는 것이 좋습니다.