이진 검색 트리를 사용하고 가장 많이 액세스하는 항목 (우선 순위가 높은 항목)이 트리의 최상위에 있고 루트가 가장 많이 액세스되는 노드가되도록 자체 순서로 변경해야하는 할당이 있습니다. .
교수는 나에게 BST와 노드 구조체를 제공했지만 알고리즘을 내 머리에 넣어 트리를 업데이트하려고 시도하는 것은 혼란 스럽습니다.
삽입이 발생함에 따라 현재 노드의 데이터가 현재 노드보다 작거나 큰지 확인한 다음 null 포인터를 찾아서 거기에 삽입 할 때까지 올바른 방향으로 재귀 적으로 진행됩니다. 삽입 된 후 우선 순위가 1 씩 증가합니다.
template <class Type>
void BinarySearchTree<Type> :: insert( const Type & x, BinaryNode<Type> * & t )
{
if( t == NULL )
t = new BinaryNode<Type>( x, NULL, NULL );
else if( x < t->element )
insert( x, t->left );
else if( t->element < x )
insert( x, t->right );
else
t->priority++; // Duplicate; do nothing for right now
}
이제 노드가 같은지 알아 내야합니다. 현재 노드 (이미 존재하는 노드와 동일)가 기존 노드를 찾아 해당 노드의 우선 순위를 높인 다음 트리를 재정렬하는 방법을 알아야합니다. 루트는 낮은 우선 순위입니다.
AVL 논리가 작동하고 시프트가 발생할 때 단일 회전 오른쪽 또는 단일 회전 왼쪽이라는 아이디어가 있다고 생각합니다.
여기 혼란 스럽습니다. 문제를 해결하기 위해 알고리즘을 만드는 것으로 시작해야 할 곳을 실제로 모릅니다. AVL 알고리즘은 트리의 균형을 추적 한 다음 노드를 왼쪽 또는 오른쪽으로 회전하는 작업을 수행하므로 우선 순위가 가장 높은 노드에는 우선 순위가 높은 자식이없는 균형 조정에 대해 걱정할 필요가 없습니다. .