Ejemplo n.º 1
0
int
OrderedSearchTree<Etype>::Remove( const Etype & X, BinaryNode<Etype> * & T )
{
    BinaryNode<Etype> *Tmp = NULL;

    if( T == NULL )
        return 0;
    else
    if( X < T->Element )   // Go left
        return Remove( X, T->Left ) ? T->Size-- : 0;
    else
    if( T->Element < X )   // Go right
        return Remove( X, T->Right ) ? T->Size-- : 0;
    else
    if( T->Left != NULL && T->Right != NULL )  // Two children
    {
        Tmp = (BinaryNode<Etype> *) FindMin( T->Right );
        T->Element = Tmp->Element;
        T->Size--;
        return RemoveMin( T->Right );       // Remove minimum
    }

        // One or zero children
    Tmp = T;
    T = ( T->Left != NULL ) ? T->Left : T->Right;
    delete Tmp;
    return 1;
}
Ejemplo n.º 2
0
int main() {
  MinHeap* heap = NewMinHeap();
  for (int i = 10; i > 0; --i) {
    Push(heap, i);
    printf("Min Value: %d\n", MinValue(heap));
  }
  while (heap->size > 0) {
    int min = RemoveMin(heap);
    printf("Removed min value: %d.  Size is now %d.", min, heap->size);
  }
}
Ejemplo n.º 3
0
int
OrderedSearchTree<Etype>::RemoveMin( BinaryNode<Etype> * & T )
{
    if( T == NULL )
        return 0;
    else if( T->Left != NULL )
        return RemoveMin( T->Left ) ? T->Size-- : 0;

    BinaryNode<Etype> *Tmp = T;
    T = T->Right;
    delete Tmp;
    return 1;
}