| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 알고리즘
- null병합 연산자
- 분할정복
- 참조타입
- 힙트리
- 힙정의
- 힙성질
- 참조값
- 옵셔널체이닝
- 자료구조
- literal
- 얕은비교
- hash table
- quadratic probing
- 호이스팅
- 해시테이블
- 자바스크립트
- 리터럴
- 함수표현
- 리액트
- 백준
- 상수시간
- 함수선언
- 리렌더링
- 원시타입
- heapify
- 해시함수
- 원시값
- 균형이진트리
- 삽입
- Today
- Total
천천히 하지만 더 멀리
이진트리 [ 힙 ] 본문
이진트리 ( binary tree ) 는 부모 노드는 최대 2개의 자식노드를 가질수 있는 자료구조이다.
완전 이진 트리 모양이면서 힙성질을 따르면 힙 트리라고 한다.
1. 완전 이진 트리란?
마지막 레벨을 제외하고 자식 노드가 왼쪽부터 채워져 있는 트리를 일컫는다.

2. 힙성질 만족?
부모노드의 키값이 자식노드의 키값이 작지 않은 경우 즉 부모노드의 키값이 자식노드의 키값보다 크거나 같은 경우에 힙성질을 만족한다.

위의 예시는 힙성질을 만족할까? 그렇지 않다. 루트노드부터 봐도 두 자식노드보다 키값이 작기 때문에 힙성질을 만족한다고 볼수 없다. 루트 노드 뿐만 아니라 level 2 의 두개 노드 ( 9, 6 ) level 3 (1 노드) 도 만족 하지 않는다. 같은 키값으로 힙성질을 만족하도록 재배치 해보자.

위의 예시는 힙트리를 만족하는 경우이다.
힙트리 특징
1. 상수시간 계산으로 부모노드의 왼쪽 자식노드 오른쪽 자식노드를 알수 있다.
- 루트노드 왼쪽 자식노드의 인덱스 = 1 (루트노드 인덱스) x 2 = 2
- 루트노드 오른쪽 자식노드의 인덱스 = 1 (루트노드 인덱스) x 2 + 1 = 3
- k 노드의 왼쪽 자식노드의 인덱스 = k x 2
- k 노드의 오른쪽 자식노드의 인덱스 = (k x 2) + 1
2. 상수시간 계산으로 자식의 부모 노드를 알수 있다. ( 정수나눗셈 )
- 루트노드 인덱스 = 2 (루트 왼쪽 자식 노드) // 2 = 1
- 루트노드 인덱스 = 3 (루트 오른족 자식 노드) // 2 = 1
- k 노드의 인덱스 = ( k 의 왼쪽 자식노드 인덱스 ) // 2
- k 노드의 인덱스 = ( k 의 오른쪽 자식노드 인덱스 ) // 2
3. 루트노드에는 항상 가장 큰 값이 들어있다.
Reference
한국외대, 컴퓨터전자시스템공학부, 자료구조 2020-1
'CS > 자료 구조' 카테고리의 다른 글
| 이진트리 순회 ( Preorder, Inorder, Postorder ) (0) | 2022.02.05 |
|---|---|
| Heap tree ( Insert, find_max, delete_max ) (0) | 2022.01.23 |
| 이진트리 ( binary tree ) 표현법 (0) | 2021.12.25 |
| 해시 테이블 Hash Table (2) [ 충돌 회피 방법 및 성능평가 ] (0) | 2021.12.17 |
| 해시 테이블 Hash Table (1) (0) | 2021.12.09 |