자료구조 · 이진트리

배열 인덱스와 이진트리 위치 매퍼

완전 이진트리를 배열에 저장할 때 부모와 자식 인덱스가 왜 일정한 수식으로 이어지는지 노드 위치와 배열 칸을 함께 맞춰 본다.

01

레벨 순서 저장

루트부터 같은 깊이의 노드를 왼쪽에서 오른쪽으로 배열에 넣는다.

빈 칸 없는 완전 트리 기준
02

자식 위치 계산

인덱스 i의 왼쪽 자식은 2i+1, 오른쪽 자식은 2i+2 위치에 놓인다.

힙 구현의 핵심
03

부모 역산

자식 인덱스에서 1을 빼고 2로 나누면 부모 칸으로 되돌아간다.

상향 조정에 사용
04

범위 검사

계산된 인덱스가 배열 길이보다 작을 때만 실제 노드가 존재한다.

leaf 판정
i = 0
루트 노드 부모가 없는 시작점이며 모든 하위 계산의 기준이 된다.
heap root
i = 1, 2
루트의 두 자식 왼쪽과 오른쪽 서브트리의 시작 인덱스가 분리된다.
level 1
i >= n
존재하지 않는 칸 수식상 위치는 나와도 배열 범위를 벗어나면 노드로 취급하지 않는다.
경계값 점검

구현 체크포인트

삽입 마지막 칸에 넣은 뒤 부모와 비교하며 위로 올린다.
삭제 루트를 마지막 칸과 바꾸고 아래로 내리며 힙 성질을 회복한다.
표현 한계 일반 이진트리는 빈 자리가 많아 배열 표현의 낭비가 커진다.