※ TrickleDown 함수
- 루트 제거 과정을 코드로 작성하면 다음과 같습니다.
public E remove(){
E tmp = array[0];
swap(0, lastposition--); // 루트와 마지막 노드를 바꿔주고 lastposition 을 줄여 배열에서 제거한다.
trickleDown(0);
return tmp;
}
public void trickleDown(int parent){
int left = 2*parent + 1;
int right = 2*parent + 2;
// 마지막에 왼쪽 자식이 클 때
if (left == lastposition && (((Comparable<E>)array[parent]).compareTo(array[left])<0){
swap(parent, left)
return;
}
// 마지막에 오른쪽 자식이 클 때
if(right == lastpostion && (((Comparable<E>)array[parent]).compareTo(array[right])<0){
swap(parent, right)
return;
}
// 마지막에 부모가 클 때
if(left >= lastposition || right >= lastpositon)
return;
// 왼쪽 자식이 클 때
if (array[left] > array[right] && array[parent] < array[left]){
swap(parent, left);
trickleDown(left);
}
// 오른쪽 자식이 클 때
else if(array[parent] < array[right]){
swap(parent,right);
trickleDown(right);
}
}
'기타 > What I Learned' 카테고리의 다른 글
[TIL] 자료구조 - 트리: 완전 트리와 정 트리 (0) | 2022.06.30 |
---|---|
[TIL] 자료구조 - 정렬 (0) | 2022.06.29 |
[TIL] 자료구조 - TrickleUp 함수 (0) | 2022.06.27 |
[TIL] 자료구조 - 힙:추가와 제거 (0) | 2022.06.24 |
[TIL] 자료구조 - Tree Levels (0) | 2022.06.23 |