글자가있는 이진 트리가있는 경우 왼쪽을 점 (.)으로하고 오른쪽을 대시 (-)로 지정하십시오. 트리를 탐색 할 때 경로를 추적하여 각 문자의 이진 코드가 무엇인지 알 수 있습니다.
편집
코드를 보면, 당신은 제대로 트리를 통과 아닙니다. 첫째, 나는 변수 res
이 무엇인지 모르겠다. 그러나 정적인데, 좋은 코딩 방법이 아니다.
실제 문제는 귀하의 비교 item.compareTo(root.element) < 0
이 (가)이 트리에 대한 유효한 비교가 아니라는 것입니다. 대신, 재귀 호출을 테스트로 사용해야합니다 (treeContains(root.right, item)
). true가 반환 될 때만 res
문자열에 점 (.)을 추가 할 수 있습니다. false를 반환하면 root.left
을 사용하여 재귀 호출을 만들고 대시 (-)를 추가 할 수 있습니다.
개인적으로이 메서드에서 문자열을 반환합니다. 문자열은 지금까지의 문자에 대한 모스 부호이거나, 문자가 없으면 null입니다. 올바른 트리 탐색에서 돌아 왔을 때 올바른 문자열 (지금 당장 res에 사용중인 문자열)을 빌드하십시오.
테스트 할 사항 중 하나는 올바른 결과가 나오기 위해 문자열의 뒤쪽 대신 문자열의 앞쪽에 연결해야한다는 것입니다.
이 트리의 진정한 유용성은 모스 코드를 디코딩하여 점 대시 문자열을 올바른 문자로 변환하는 데 있습니다. 이것은 간단한 트리 순회가됩니다.
모르스 부호 할당이 어떻게되었는지 알고 싶다면, 사무엘 모르스 (Samuel Morse)와 이야기하거나 위키 피 디아 (Wikipedia)에서 모스 부호를 찾아보아야합니다. 내 일반적인 이해는 문자 빈도를 기반으로하며 짧은 코드는 가장 자주 사용되는 문자에 할당됩니다. – gmlobdell
내가 올바르게 기억한다면, 가장 일반적인 글자는 최소한의 점과 대시로 작성됩니다. 이진 트리 표현을 위해 [이 이미지] (http://upload.wikimedia.org/wikipedia/commons/c/ca/Morse_code_tree3.png) (줄의 점선과 점선을 주목하십시오)를보십시오. – Blender
간단한 매핑 ('letter'=> 'code')으로 충분하다면 왜 여기에 이진 트리를 사용해야할까요? – raina77ow