2012-11-18 2 views
0

편지의 모스 부호 표현은 어떻게 결정됩니까?모스 부호 - 이진 나무

"E"= "." "T"= "-"

영문자가 아닌 이유는 무엇입니까?

나는이 트래이너 바이너리 트리를위한 알고리즘을 개발하려고하고있다. 편지.

내 주요 목표는 "A"와 같은 문자를 검색하는 것이지만, 오른쪽 또는 왼쪽 노드로 분기 할시기를 결정하는 데 사용할 조건을 모르겠습니다.

수정

이것은 내가 시도한 것입니다. 여기 나는 길을 추적하려고 노력하고있다. 하지만 "E"와 같은 암호를 사용하여 시도하면 루트가 비어 있다고합니다.

+0

모르스 부호 할당이 어떻게되었는지 알고 싶다면, 사무엘 모르스 (Samuel Morse)와 이야기하거나 위키 피 디아 (Wikipedia)에서 모스 부호를 찾아보아야합니다. 내 일반적인 이해는 문자 빈도를 기반으로하며 짧은 코드는 가장 자주 사용되는 문자에 할당됩니다. – gmlobdell

+4

내가 올바르게 기억한다면, 가장 일반적인 글자는 최소한의 점과 대시로 작성됩니다. 이진 트리 표현을 위해 [이 이미지] (http://upload.wikimedia.org/wikipedia/commons/c/ca/Morse_code_tree3.png) (줄의 점선과 점선을 주목하십시오)를보십시오. – Blender

+0

간단한 매핑 ('letter'=> 'code')으로 충분하다면 왜 여기에 이진 트리를 사용해야할까요? – raina77ow

답변

2

글자가있는 이진 트리가있는 경우 왼쪽을 점 (.)으로하고 오른쪽을 대시 (-)로 지정하십시오. 트리를 탐색 할 때 경로를 추적하여 각 문자의 이진 코드가 무엇인지 알 수 있습니다.

편집

코드를 보면, 당신은 제대로 트리를 통과 아닙니다. 첫째, 나는 변수 res이 무엇인지 모르겠다. 그러나 정적인데, 좋은 코딩 방법이 아니다.

실제 문제는 귀하의 비교 item.compareTo(root.element) < 0이 (가)이 트리에 대한 유효한 비교가 아니라는 것입니다. 대신, 재귀 호출을 테스트로 사용해야합니다 (treeContains(root.right, item)). true가 반환 될 때만 res 문자열에 점 (.)을 추가 할 수 있습니다. false를 반환하면 root.left을 사용하여 재귀 호출을 만들고 대시 (-)를 추가 할 수 있습니다.

개인적으로이 메서드에서 문자열을 반환합니다. 문자열은 지금까지의 문자에 대한 모스 부호이거나, 문자가 없으면 null입니다. 올바른 트리 탐색에서 돌아 왔을 때 올바른 문자열 (지금 당장 res에 사용중인 문자열)을 빌드하십시오.

테스트 할 사항 중 하나는 올바른 결과가 나오기 위해 문자열의 뒤쪽 대신 문자열의 앞쪽에 연결해야한다는 것입니다.

이 트리의 진정한 유용성은 모스 코드를 디코딩하여 점 대시 문자열을 올바른 문자로 변환하는 데 있습니다. 이것은 간단한 트리 순회가됩니다.

+0

예, 그게 내가하려고 한 것이지만 작동하지 않았습니다. Pls 내 편집을 봐. –

+1

위의 편집이 도움이됩니까? – gmlobdell