inorder 및 preorder traversal을 사용하여 트리를 어떻게 구성 할 수 있습니까? 효율적인 알고리즘을 찾고 있습니다.트리 구성
트리 구성
답변
뻔뻔 스러움을 복사하고 Sun's (Oracle now, I guess...) forum에서 붙여 넣기 :
이질문 :
아무도 중위에서 이진 트리 postorder 순회를 구성하는 방법에 대한 좀 도와 줄래, 내가 너무 알고리즘을 알고 싶어요 나는 그것을 적용 할 수있다.답변 :
는p_1
,p_2
...
p_n
가 postorder 통과하자 및i_1
,i_2
...
i_n
이 중위 순회 할 수 있습니다. postorder traversal에서 트리의 루트가p_n
임을 알 수 있습니다. 중위 주사로이 요소를 찾아,i_2
...
i_k-1
p_n
i_k+1
...
i_n
을i_1
을 말한다. inorder traversal에서 왼쪽 하위 트리의 모든 요소를 찾습니다. 예를 들어i_1
,i_2
...
i_k-1
및 오른쪽 하위 트리가 각각i_k+1
...
i_n
입니다.요소를 제거하십시오.
p_n
(및 요소i_k
==
p_n
). 가장 오른쪽 요소p_1
에서p_j
,p_j
이i_1
,i_2
...i_k-1
의 요소입니다p_2
...
p_j
...
p_n-1
를 찾을 수 있습니다. 이것은 원래 트리의 왼쪽 하위 트리의 루트입니다. 분할p_1
,p_2
...
p_j
및p_j+1
...p_n-1
및i_1
을i_2
...
i_k-1
및...
i_n
i_k+1
. 이제 원래 트리의 두 하위 트리에 대한 순회 및 inorder 순회를 나타내는 두 개의 하위 시퀀스가 있습니다.
저자 : JosAH.
나는 Jos의 지침에 따라 알고리즘을 구현했으며 완벽하게 작동했습니다.
p_1 ~ p_n-1에서 오른쪽 끝에있는 요소 p_j를 찾는 데 너무 많은 시간이 걸리는 반면 i_1 ~ i_k-1에도 있습니다. 그것은 O (n^2) 시간이 걸립니다. 사실, p_n을 제거하고 i_1 ~ i_n에서 위치를 찾습니다. 우리는 이미 p_j의 위치를 알고 있습니다. 이는 i_1 ~ i_n의 p_n 다음에 요소를 세 어서 얻을 수있는 왼쪽 및 오른쪽 하위 트리의 노드 수를 이미 알고 있기 때문입니다. 이것으로 p_1 ~ p_n-1을 나눌 곳을 쉽게 찾을 수있었습니다. – ibread
숙제이기 때문에 전적으로 대답하지는 않겠지 만, 잘하면 충분히 움직일 수있을 것입니다.
예를 들어, 선착순으로 말하면, this 트리라고 해봅시다.
탐색은 2-7-2-6-5-11-5 ... 등을 제공합니다. 5는 실제로 루트의 올바른 하위 항목입니다.
분명히 숫자 만 보는 것에서 알 수는 없으므로 트리의 구조에 대해 알려주거나 추가 데이터를 저장할 필요가 있습니다 (즉, 노드가 왼쪽인지 아동 또는 아동).
트리를 구문 분석하는 것은 선주문 탐색을 입력으로받는 재귀 함수입니다 (입력을 전달할 때 범위에 대해 생각해보십시오). 이전에 언급했듯이 선주문 통과에는 몇 가지 추가 데이터가 첨부되어 있어야합니다.
효율성 :
당신이이 나무를 구축뿐만 아니라, 입력을 읽는 작업을 고려할 때 각 노드가 방문 횟수를 고려한다. 나무를 만들 수있는 것보다 빠르게 입력을 재구성 할 수있는 방법이 있습니까? 데이터를 조작해야하는 경우 어떤 구조를 사용해야합니다.주문 중 : 동일한 아이디어가 필요하므로이를 안내하지 않을 것입니다. 네가 절망적이라면 나는 다른 사람이 그렇게 할 것이라고 확신한다.
- 1. 의사 결정 트리 구성 요소
- 2. 트리 구성 요소 항목 렌더링
- 3. 순차적으로 전체 B- 트리 구성
- 4. Wicket에 정적 트리 구성 요소가 있습니까?
- 5. 플렉스 - 트리 구성 요소에서만 리프 노드를 끌기
- 6. 태피스 트리 레이아웃 및 구성 요소 라이브러리
- 7. primefaces 트리 구성 요소를 탐색 메뉴로 사용합니다.
- 8. Parsekit을 사용하여 구문 분석 트리 구성
- 9. 태피스 트리 구성 요소 렌더링 순서
- 10. 오라클 : 트리 트리 업데이트
- 11. 트리 뷰의 트리 비교
- 12. C++ n 트리 트리 라이브러리
- 13. 플렉스 트리 구성 요소에서 어떻게 노드를 선택할 수 있습니까?
- 14. JSF 트리니다 드 트리 구성 요소가 확장되지 않습니다
- 15. 임의의 "정수"트리 구성 - 깊이 우선/너비 우선
- 16. Facelets를 뷰로 사용하여 UIViewRoot에서 구성 요소 트리 가져 오기
- 17. Flex 3의 트리 구성 요소에 대한 dropIndicator 상태 결정
- 18. 비주얼 트리 xml 편집기 스윙 구성 요소를 통합하는 방법?
- 19. .NET 용 XML 트리 뷰어에 대한 타사 구성 요소가 있습니까?
- 20. uicomponent 트리 메모리 사용량
- 21. ViewModel 트리 대 자주 업데이트되는 모델 트리
- 22. 시각적 트리 및 논리 트리 개념
- 23. Perl에 n- 트리 트리 구현이 있습니까?
- 24. 레드 블랙 트리 - 사전 주문 트리 인쇄
- 25. 트리 구조는 어떻게 트리 구조를 가지고
- 26. 자바 이진 검색 트리 재귀 복사 트리
- 27. Java의 이진 검색 트리 재귀 하위 트리
- 28. CakePHP 트리 동작, 테이블 당 여러 트리
- 29. 플렉스 트리 방문 표시기
- 30. 델파이 트리 뷰 선택 분실
글쎄, 반복적으로. 네가 내 학생이 아니길 바래. –
설명이 필요합니다. 입력 데이터의 형식은 무엇입니까? 나무가 균형을 이루고 있습니까? 효율적인 (Ordo (x) 또는 단지 "끔찍하게 미친 것은 아닙니다") 무엇을 의미합니까? 구축하려는 구조는 무엇입니까? 트리를 링크 된 객체로 사용하거나 트리를 배열로 사용합니다. – ron
http://forums.devshed.com/software-design-43/finding-binary-tree-from-inorder-and-preorder-traversals-151147.html – Heinzi