Professional Documents
Culture Documents
Parte 1
a) rboles AVL
Propiedades:
Las claves almacenadas en el subrbol izquierdo son menores que
la raz
Las claves en el subrbol derecho son mayores que la raz
Todos los subrboles cumplen estas propiedades
Estructuras de Datos rboles 6
rboles de bsqueda
ADT BST AVL
Implementacin BST
Nodo de rbol binario:
Constructores
}
Implementacin BST
Clase BinarySearchTree:
public class BinarySearchTree<T extends Comparable<? super T>>
{
private static class BinaryNode<T>
{
Clase de la diapositiva anterior
}
Mtodos
}
Operaciones
public class BinarySearchTree<T extends Comparable<? super T>>
{ public BinarySearchTree( )
public void insert( T x )
public void remove( T x )
public T findMin( )
public T findMax( )
public boolean contains( T x )
public void makeEmpty( )
public boolean isEmpty( )
public void printTree( )
private BinaryNode<T> insert( T x, BinaryNode<T> t )
private BinaryNode<T> remove( T x, BinaryNode<T> t )
private BinaryNode<T> findMin( BinaryNode<T> t )
private BinaryNode<T> findMax( BinaryNode<T> t )
private boolean contains( T x, BinaryNode<T> t )
private void printTree( BinaryNode<T> t )
private int height( BinaryNode<T> t )
}
Operaciones
public BinarySearchTree( ) // Construct the tree
{
root = null;
}
Operaciones: insertar
Insertar: Comparar el nuevo dato con el nodo actual; si es mayor,
insertar en el subrbol derecho, si es menor, insertar en el izquierdo
insert(x, Node t)
if (t == null)
return new Node(x)
if (x > t.element)
t.right = insert(x, t.right)
if (x < t.key)
t.left = insert(x, t.left)
return t
Operaciones: insertar
public void insert( T x )
{ root = insert( x, root ); }
Operaciones: bsqueda
Operaciones: bsqueda
public boolean contains( T x )
{ return contains( x, root );
}
Operaciones: mnimo
findMin(t) // return left-most node
if (t.left == null)
return t.element
else
return findMin(t.left)
Operaciones: mnimo
public T findMin( )
{
if( isEmpty( ) )
throw new UnderflowException( );
return findMin( root ).element;
}
Operaciones: mnimo
Versin findMin (no recursiva):
private BinaryNode<T> findMin( BinaryNode<T> t )
{
if( t != null )
while( t.left != null )
t = t.left;
return t;
}
Operaciones: eliminacin
Operaciones: eliminacin
1. Buscar el nodo a eliminar t
2. Reemplazar el dato de t con el
menor nodo del subrbol derecho
a = findMin(t.right);
t.element = a.element;
3. Por ltimo, eliminar el nodo menor
original en el subrbol derecho
remove(a.element, t.right);
Operaciones: eliminacin
public void remove( T x )
{ root = remove( x, root ); }
private BinaryNode<T> remove( T x, BinaryNode<T> t )
{ if( t == null )
return t; // Item not found; do nothing
int compareResult = x.compareTo( t.element );
if( compareResult < 0 )
t.left = remove( x, t.left );
else if( compareResult > 0 )
t.right = remove( x, t.right );
else if( t.left != null && t.right != null ) // Two children
{ t.element = findMin( t.right ).element;
t.right = remove( t.element, t.right );
}
else
t = ( t.left != null ) ? t.left : t.right;
return t;
}
Estructuras de Datos rboles 21
rboles de bsqueda
ADT BST AVL
Operaciones: altura
Insertar la secuencia 1, 6, 5, 4, 3, 2.
Eliminar el 1.
O(N)
rbol AVL
1. Un rbol vaco est balanceado con respecto a la altura
2. El rbol balanceado ptimo ser aquel que cumple:
n = 2h - 1, donde n = # nodos y h = altura
Implementacin AVL
Nodo en un rbol AVL:
Constructores
}
Implementacin AVL
Mtodos
}
Tarea
1. Revisar y probar las siguientes clases:
a) BinarySearchTree.java
b) AvlTree.java