기타/What I Learned

[TIL] 자료구조 - TrickleUp 함수

가죽방패 2022. 6. 27. 09:49

※ TrickleUp 함수

- 완전이진트리 이기 때문에 노드의 위치는 다음과 같은 성질을 가진다

 

children: 2 * parent + 1 혹은 2 * parent + 2

parent: floor((child-1)/2)

 

위와 같은 성질을 이용하여 노드 추가 과정을 코드로 작성하면 다음과 같다

 

int lastposition; // 어디까지 요소를 넣었는지 기록하기 위함
E[] array = (E[]) new Object[size];
public void add(E obj){
	array[++lastposition] = obj; // 1. 노드 추가
    trickleup(lastposition); // 2. trickle up
}
public void swap(int from, int to){
	E tmp = array[from];
    array[from] = array[to];
    array[to] = tmp;
}
public void trickleup(int position){
	if(position == 0)
    	return;
    int parent = (int) Math.floor((position-1)/2)
    if (((Comparable<E>) array[position]).compareTo(array.parent)>0){
    	swap(position, parent);
        trickleup(parent);
    }
}

'기타 > What I Learned' 카테고리의 다른 글

[TIL] 자료구조 - 정렬  (0) 2022.06.29
[TIL] 자료구조 - TrickleDown  (0) 2022.06.28
[TIL] 자료구조 - 힙:추가와 제거  (0) 2022.06.24
[TIL] 자료구조 - Tree Levels  (0) 2022.06.23
[TIL] 자료구조 - 힙과 트리  (0) 2022.06.22