728x90
01. 선택 트리
✅ 합병 정렬
- 차례로 정렬된 k개의 데이터 리스트를 완전한 순서를 유지하는 하나의 데이터 리스트로 만드는 과정
- 일반적으로 데이터 리스트가 k개인 경우 k-1번 비교를 통해 데이터 리스트에서 가장 큰/작은 값을 결정함
- 데이터가 많을 수록 엄청난 비교 횟수(오버헤드) => 선택 트리를 이용하여 비교 횟수를 줄일 수 있음
✅ 승자 트리
- 비교 횟수가 많은 합병 정렬 대신 선택 트리를 이용하여 구현
- 부모 노드가 두 자식 노드보다 작은 값을 갖는 완전 이진 트리
- 작은 값이 승자가 되어 올라가는 토너먼트 경기와 유사
- 트리의 각 노드는 두 자식 노드 값의 승자를 자신의 값으로 함
- 결과적으로 루트의 값이 트리에서 가장 작은 값이 됨
=> 11 삭제 후, 24 추가하여 삭제되어 빈 부분을 비교하여 승자 트리 재구성
- 첫번째 단계에서의 비교 횟수를 줄이지는 못했지만, 두번째 비교 단계부터는 비교 횟수가 감소됨
- 재구성 과정에서 빈 리스트가 생기면 큰 값을 넣어즘
✅ 패자 트리
- 승자 트리보다 구현하기 쉬운 자료구조를 구상하다가 탄생(효율은 비슷)
- 각 노드가 두 자식 노드보다 더 작은 값을 갖는 완전 이진 트리라는 점은 승자 트리와 같지만! 패자 트리는 루트 노드 위에 최상위 0번 노드를 가짐
- 최상위 0번 노드에는 최종 승자를 저장함
- 트리의 각 내부 노드에는 승자가 아닌 패자를 저장(즉, 패자를 부모 노드에 저장하고 승자는 부모의 부모 노드로 올라가서 다시 경쟁)
- 루트에는 마지막 패자를 저장하고 최종 승자는 0번 노드에 저장
- 2레벨의 14는 4레벨의 14와 11을 비교해서 패자인 14를 넣은 것(2레벨 17은 4레벨의 12와 17을 비교)
- 1레벨의 12의 경우 2레벨의 내부 노드 값(패자)이 아닌 승자 값을 비교해서 패자인 12를 넣어줌(승자인 11은 0번 노드로)
- 재구성할 때는 자식과 자식간의 비교가 아니라 부모와 자식간의 비교!!
02. 숲
✅ 숲
- n(n>=0)개 이상의 분리된 트리 집합
- 트리에서 루트(혹은 다른 노드)를 제거하면 숲을 쉽게 얻을 수 있음 ↔ 숲을 연결하면 트리를 만들 수 있음
🔸숲의 이진트리 변환
🔸일반트리 → 이진트리(참고)
🔸숲 → 이진트리
- 숲을 하나의 통합된 자료구조에 넣어서 관리할 수 있음
03. 이진 트리 개수
🔸노드 개수에 따른 가능한 이진 트리
=> 순회 방법이 정해진 상태에서 출력되는 값들의 순서가 정해지면 이진트리는 제한된 개수만큼만 만들어짐
Q. 노드가 3개인 이진 트리에서 전위 순회 방문 순서가 1,2,3 이고 중위 순회 방문 순서가 1,3,2라면 위의 5개의 트리 중 어느 것일까?
A. 두번째 트리
▪️ 첫번째 트리 중위 순회 방문
▪️ 두번째 트리 중위 순회 방문
=> 어떤 이진 트리에 대한 [전위 순회와 중위 순회 방문 순서]가 주어지면 트리 구조는 유일하게(1개) 특정할 수 있음
728x90
'KNOU > 자료구조' 카테고리의 다른 글
[자료구조] 12. 멀티웨이 탐색 트리(1) (0) | 2022.12.08 |
---|---|
[자료구조] 11. 이진 탐색 트리, Splay, AVL, BB (0) | 2022.12.07 |
[자료구조] 9. 힢 (0) | 2022.12.04 |
[자료구조] 8. 스레드 트리 (0) | 2022.12.04 |
[자료구조] 7. 트리 (1) | 2022.12.04 |