tree 기초#
상태: 정리완료
태그: tree
- Full Binary Tree - 포화 이진 트리
- 모든 레벨에 노드가 포화상태로 차 있는 이진트리
- leaf 노드를 제외한 모든 노드의 차수가 2개로 이루어져 있는 경우를 의미
- Complete Binary Tree - 완전 이진 트리
- 높이가 h이고 노드 수가 n일 때 \(h + 1 \le n \lt 2^{h+1}-1\)를 만족한다. 포화 이진트리의 노드를 좌에서 우로, 위에서 아래로 번호를 붙였을 때 가장 마지막 레벨에 있는 노드만 생략이 가능하다.
- Skewed Binary Tree - 편향 이진 트리
- 왼쪽, 오른쪽 skewed binary tree가 있다. 한쪽 방향의 자식 노드만을 갖는다.
이진트리의 구현방법#
left_child
,right_child
, (parent
) 레퍼런스를 사용한 클래스- 배열
- 인덱스가 0부터 시작하는 경우
- 부모의 인덱스 :
(i-1) >> 1
- 왼쪽 자식의 인덱스 :
i << 1 | 1
- 오른쪽 자식의 인덱스 :
i << 1 + 2
- 부모의 인덱스 :
- 1부터 시작하는 경우
- 부모의 인덱스 :
i >> 1
- 왼쪽 자식의 인덱스 :
i << 1
- 오른쪽 자식의 인덱스 :
i << 1 | 1
- 부모의 인덱스 :
- 인덱스가 0부터 시작하는 경우
트리의 순회#
- 전위 순회
- VLR : 자손보다 루트를 먼저 방문
- 중위 순회
- LVR : 왼쪽 자손, 루트, 오른쪽 자손 순으로 방문
- 후위 순회
- LRV : 루트보다 자손을 먼저 방문
Expression Tree#
수식을 표현하는 데 사용되는 트리
- 중위순회를 하게 되면 우리가 익히 알고 있는 중위 표기법이 탄생
a/b*c*d+e
- 후위순회를 하면 후위 표기법
ab/c*d*e+
- 전위순회를 하면 함수처럼 사용하는 전위 표기법
+**/abcde
연산자 우선순위는?
Binary Search Tree#
탐색작업을 효율적으로 하기 위한 자료구조. 모든 원소는 키값으로 트리에 정렬. 모든 부분트리의 루트와 비교하여 루트보다 작은 값은 왼쪽 자식, 큰 값은 오른쪽 자식으로 보낸다.
삽입연산
- 탐색을 수행. 삽입할 원소와 같은 원소가 트리에 있으면 삽입할 수 없기 때문에 탐색먼저.
- 탐색을 실패하면 그 위치에 원소를 삽입할 수 있다.