두 갈래 나무: 더미
3406 단어 두 갈래 나무
한 노드의 부모 노드 아래첨자는 다음과 같습니다. (현재 아래첨자 - 1)/2
한 노드의 왼쪽 노드 아래쪽: 현재 아래쪽* 2 + 1
한 노드의 오른쪽 노드 아래쪽: 현재 아래쪽* 2 + 2
수조로 구축할 때 마지막 노드에 쉽게 접근할 수 있기 때문에 우선순위 대기열 같은 응용에 적합하다.매번 노드가 추가될 때마다 항상 먼저 수조의 마지막 빈자리에 삽입한 다음에 순서대로 아버지 노드와 비교하고 아버지 노드가 작으면 교환한다.노드를 삭제할 때마다 뿌리를 삭제하고 되돌려줍니다. 그리고 마지막 노드를 뿌리의 위치에 놓고 비교적 큰 하위 노드와 차례로 비교합니다. 하위 노드보다 크면 교환합니다.
무더기 코드:
import java.util.ArrayList;
import java.util.List;
public class Heap <K,V>{
private List<Entity<K,V>> heap;
public Heap(){
heap = new ArrayList<Entity<K,V>>();
}
public void put(K key,V value){
Entity<K,V> e = new Entity<K,V>(key, value);
heap.add(e);
Comparable<? super K> k = (Comparable<? super K>)key;
int index = heap.size() - 1;
int parent = (index - 1) / 2;
while(index != parent && k.compareTo(heap.get(parent).key) > 0){
heap.set(index, heap.get(parent));
index = parent;
if(index == 0){
break;
}
parent = (index -1) / 2;
}
heap.set(index, e);
}
public V pop(){
Entity<K,V> e = heap.get(0);
if(heap.size() == 1){
heap.remove(0);
} else {
Entity<K, V> top = heap.remove(heap.size() - 1);
heap.set(0, top);
int left = 1;
int right = 2;
int current = 0;
while (left < heap.size()) {
int child;
Comparable<? super K> k = (Comparable<? super K>) heap.get(left).key;
if (right < heap.size() && k.compareTo(heap.get(right).key) < 0) {
child = right;
} else {
child = left;
}
k = (Comparable<? super K>) heap.get(current).key;
if (k.compareTo(heap.get(child).key) < 0) {
heap.set(current, heap.get(child));
heap.set(child, top);
current = child;
left = current * 2 + 1;
right = left + 1;
} else {
break;
}
}
}
return e.value;
}
public int size(){
return heap.size();
}
public boolean isEmpty(){
return heap.isEmpty();
}
private static final class Entity <K,V>{
private K key;
private V value;
public Entity(K key,V value){
this.key = key;
this.value = value;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 데이터 구조 2차원 트리의 실현 코드일.두 갈래 트리 인터페이스 2 노드 클래스 3. 두 갈래 나무 구현 이 글을 통해 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.