Search
🏫

[자료구조] 10. 선택 트리, 숲, 이진 트리 개수

Tags
CS
Data Structure
Last edited time
2023/04/15 04:35
2 more properties

1. 선택트리

1.1. 합병 트리

차례로 정렬된 데이터 리스트 k개를 완전한 순서로 유지하는 하나의 리스트로 만드는 과정
일반적으로 데이터 리스트가 k개인 경우 k-1번 비교
선택 트리를 활용하여 비교 횟수 줄일 수 있음

1.2. 승자 트리

부모 노드가 두 자식 노드보다 작은 값을 갖는 포화 이진 트리
작은 값이 승자가 되어 올라가는 토너먼트 경기와 유사
트리의 각 노드는 두 자식 노드 값의 승자를 자신의 값으로 함
결과적으로 루트의 값이 트리에서 가장 작은 값이 됨
프로세스
24를 넣을때는 3번만 비교하면됨
첫번째 단계에서는 비교 횟수를 줄이지 못했지만, 두번쩨 비교단계부터는 비교 횟수가 감소됨
재구성 과정에서 빈 리스트가 생기면 큰 값을 넣어줌

1.3. 패자 트리

부모 노드가 두 자식 노드보다 작은 값을 갖는 포화 이진 트리인 점은 승자 트리와 같지만, 패자 트리는 루트 노드 위에 최상이 0번 노드를 가짐
최상위 0번 노드에는 최종 승자를 저장
트리의 각 노드는 승자가 아닌 패자를 저장
즉, 패자를 부모노드에 저장하고, 승자는 부모의 부모 노드로 올라가서 다시 경쟁
루트에는 마지막 패자를 저장하고, 최종 승자는 0번 노드에 저장
예시
0번 노드에 최소값이 있으므로 이 값을 제거하여 전체 리스트에 저장
저게된 값을 갖고 있던 4번 리스트 head에 위치한 값 24를 패자 트리에 올려 보내고 경쟁을 시킴
패자 트리를 재구성

2. 숲

2.1. 정의

기본 정의
분리 된 트리 모임
트리의 모임
0개 이상의 분리된 트리 집합
기술적 정의
n( n≥0)개 이상의 분리된 트리 집합
트리에서 루트(혹은 다른 노드)를 제거하면 숲을 쉽게 얻을 수 있음
숲의 개수 = 루트 노드의 자식 노드 수
반대로 숲을 연결하면 트리를 만들 수도 있음

2.2. 일반트리 → 이진 트리 변환

이진 트리 변환 방법
추가 예시

2.3. 숲의 이진트리 변환

일반트리 → 이진트리 변환 과정과 동일
먼저 각 트리를 이진 트리로 바꿈
이때 이진트리의 루트는 왼쪽 서브트리만 가짐
다음은 첫번째 이진트리 루트를 최상위 루트로 하고, 왼쪽 자식은 그 외쪽 서브 트리, 오른쪽 자식은 나머지들의 이진 트리가 되도록 함

3. 이진 트리 개수

3.1. 노드와 이진 트리의 관계

노드 개수에 따른 가능한 이진 트리 개수
노드 개수가 3개인 이진트리 개수
노드가 3개인 이진트리에서 전위 순회 방문순서가 1 → 2→ 3 이고, 중위 순회 방문 순서가 1 → 3 → 2 라면 위 5개 트리중 어느 것일까?
1
2 (정답)
3
4
5
전위순회(PLR)
1→2→3
1→2→3
1→2→3
1→2→3
1→2→3
중위순회(LPR)
1→2→3
1→3→2
2→1→3
2→3→1
3→2→1
어떤 이진 트리에 대한 전위 순회와 중위 순회 방문 순서가 주어지면 트리 구조를 유일하게(한 개) 정할 수 있음

3.2. 스택을 이용한 이진 트리 순회

1부터 n까지의 수를 스택에 넣었다가 가능한 모든 방법을 삭제하여 생성할 수 있는 경우의 수와 n개의 노드를 가진 상이한 이진트리의 수가 같음
카탈링의 수식
(2n)!n!(n+1)!\frac{(2n)!}{n!(n+1)!}
push()
트리 생성 과정으로 껍데기 노드와 왼쪽 서브트리를 나타냄
pop()
껍데기 노드에 값을 넣고 오른쪽 서브트리로 이동하는 것
예시