Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Matricula ES1821012694
Docente: Ivonne Enríquez Castillo.
Grupo: DS-DEDA-2001-B1-002
Semestre 4°
UNIDAD 3 ACTIVIDAD 2.
Desarrollo de la actividad.
Instrucciones. Implementación en seudocódigo de los métodos relacionados con un TAD árbol binario de búsqueda (ABB):
A) Agregar nodo.
B) Borrar nodo.
C) Imprimir árbol. (recorrido del árbol.)
D) Especificación de los datos necesarios para crear las estructuras nodos y arboles(valor, referencia izquierda y derecha.)
Interfaz. ABB
Datos Descripción. Implementación.
Nodos. Un nodo consta de una variable cuyo valor Nodo nodoArbol:
será igual al almacenado en el nodo y dos Var dato;
referencias de tipo apuntador a los posibles Ptr nodoDerecho
nodos hijo (izquierdo y derecho) del nodo Ptr nodoIzquierdo
instanciado.
Operaciones.
métodos de Descripción Implementación.
construcción.
Crear () Genera un ABB, creando su nodo raíz. Este método recibe como parámetro el dato para el primer nodo del árbol, dicho valor será asignado al campo dato del
nodo raíz, declarado dentro del método. Además se inicializaran los valores de los nodos hijos del nodo raiz.
Por ultimo dicho método retornara un objeto de la clase árbol binario(ABB).
Encabezado del método. ABB crearArbol(var v)
1. //Declarar la variable raiz de tipo nodo
Nodo raiz
2. //Asignar el valor de v al campo dato del nodo raiz
raiz.dato = v
3. //Asignar un valor nulo para los subnodos izquierdo y derecho
raiz.izquierdo = null
raiz.derecho = null
4. retorna una referencia de la misma clase,
retornar ABB nuevoArbol
EliminarArbol() Elimina el espacio ocupado por el ABB. Este método recursivo recorrerá las posiciones del árbol, liberando la memoria destinada a cada nodo
Por lo cual su parámetro será el nodo raíz del árbol a eliminar.
Encabezado: void EliminarArbol(nodo raíz)
Algoritmo:
1. Si(raiz!=null)//Si el nodo raíz(nodo actual no es nulo)
1.1 //llamada recursiva para eliminar el subnodo derecho del nodo actual
EliminarArbol(raíz.derecho)
1.2 //despues liberamos el subnodo izquierdo con otra llamada recursiva
EliminarArbol(raíz.izquierdo)
Raíz = null;//liberamos el puntero del nodo actual
1.3
métodos de Descripción. Implementación.
verificación.
EsVacio() Nos dice si el ABB, se encuentra vacío o Este método requiere como parámetro el árbol, para comprobar su nodo raíz, ya que si este tiene un valor nulo,
tiene por lo menos un nodo. significa que el árbol esta vacio. El método retornara un valor booleano, para indicar si el paremetro es un árbol vacio
Encabezado: booleano Esvacio(Arbol a)
Algoritmo:
1. //si la raíz del árbol es igual a nulo
Si(a.raiz == null)
Return true;//retorna el valor verdadero que, lo que significa que la estructura esta vacio
Sino //si la raíz no es nula se retorna el valor falso
Return false;
Contiene() Indica si el valor búsqueda s, se encuentra
en el ABB. Parámetros de la función.
Las operaciones más relevantes en este Var v: variable con el árbol clave a buscar
algoritmo serán las comparaciones entre la Ptr NodoR: puntero al nodo raíz del subárbol actual.
clave s y el valor del nodo (n): Tipo de retorno booleano.
Si el valor de v es menor al del nodo actual Encabezado de método: bool contiene(var v, ptr nodoR)
se realiza una busqueda en el subnodo Algoritmo:
izquierdo de n. //si el nodo raíz apunta a null, significa que el ABB, esta vacío.
Y en caso de que v sea mayor n la búsqueda Si nodoR == null
se ejecuta sobre el sub-nodo derecho. Retornar falso
En el caso de que ambas condiciones sean Sino Si v == nodoR.dato//si la clave de busqueda es igual al valor en en el nodo
falsas, se habrá encontrado el nodo. Retornar true. //Se ha encontrado el dato
Sino si v<nodoR.dato //verifica si el valor buscado es menor al valor del nodo actual
//llamada recursiva al método cambiando al puntero del subnodo izquierdo
return contiene(v,nodoR.izquierdo)
Sino //y en caso de que v sea mayor al nodo; la llamada recursiva será referenciando al subnodo derecho.
return contiene(v,nodoR.derecho)
AlturaArbol() Calcula la altura de una estructura de árbol Gracias al método auxiliar que calcula la altura de un nodo para obtener la altura del árbol tan solo tenemos que
completa. calcular la altura del nodo raíz con una llamada a dicho método.
Este método utilizara como auxiliar el método
para obtener la altura general del árbol. Variables y parametros: R: nodo raíz del árbol
Encabezado: AlturaArbol(nodo R)
Algoritmo:
1. Si (r!=null)//Si el nodo raíz no tiene valor nulo
//Retornamos el resultado de la llamada al método altura nodo
1.1 return AlturaNodo( r );
2. Y en caso de que la raíz sea vacia
Return 0; la altura del árbol sera cero
size() Contabiliza y retorna el número de nodos en Este método recibe como parámetro la estructura de árbol, y se implementa recursivamente sumando cada uno de los
el ABB. tamaños de los subárboles izquierdo y derecho del nodo actual.
De acuerdo a lo anterior la implementación seria la siguiente
Variables y parametros:
Var tamArbol: variable auxiliar que en cada recursión ira sumando los nodos que se encuentren.
Param: rt: nodo raíz del árbol, del se contabilizaran sus nodos
Encabezado: int size( Nodo rt)
Algoritmo:
1. Usamos el metodo esVacio para comprobar si el árbol tiene nodos.
Si(esVacio(tr)==false)
1.1 //Sino esta vacío
//retorna la suma de los resultados obtenidos de las llamadas recursivas al método para calcular los nodos
del subárbol izquierdo y los del derecho, agregando una unidad por el nodo raíz del árbol
.Size(tr.izquierdo) + 1 + Size(tr.derecho)
2.//En caso de que el arbol este vacio
Return 0;//retornamos un cero
leerRaizDato() Retorna el valor almacenado en el nodo raíz. Este método recibe el árbol como parámetro y retorna el valor almacenado en el campo de su nodo raíz.
Variables y parámetros: Árbol ab parámetro de tipo estructura árbol
Encabezado: leerRaizdato(árbol ab)
Algoritmo
Si ab.dato!=null//si la raíz del árbol no esta vacia
Return ab.dato retornamos el valor de su campo dato
Sino//y si el campo se encuentra vacio
Imprimir “No hay valor en la raíz.”
Métodos para agregar Descripción. Implementación.
o eliminar
ColocarEnRaiz() Sustituye el dato almacenado en el nodo raíz. Este método recibe un dato que será posicionado en la raíz del árbol, por lo que simplemente debemos pasar la
variable con el nuevo a valor y sustituir el valor actual del nodo raíz con el del parámetro.
Variables y parámetros.
Var d: variable con el nuevo valor para el nodo raiz
Algoritmo:
1. Si (d!=null)//si la variable de sustitución no tiene un valor nulo
1.1 raiz.dato=d//Lo asignamos como dato del nodo raíz.
2. En caso de que se haya ingresado un valor invalido, mostramos un mensaje al usuario
Imprimir “Dato ingresado no valido”
Borrar() Borra un nodo de el ABB Borrar un elemento de un ABB, es una operación con un mayor grado de complejidad que las de búsqueda
e inserción de elementos, dado que debemos asegurar que sus propiedades como un árbol binario de
búsqueda, se conserven, ejecutando las reestructuraciones necesarias.
Variables y parametros:
Nodo raíz: un parámetro de tipo apuntador al nodo raíz del árbol.
Var val: parámetro variable que almacena el valor buscado a eliminar.
Tipo de retorno: Nodo: retornara un nodo del árbol modificado por el método.
Ahora vemos la implementación del método auxiliar, que realiza un recorrido inOrden, para buscar el nodo a sustituir
en el caso de eliminación de un nodo de tipo hoja.
Recordemos que este método solo recibe como parámetro un nodo raíz.
SucesorInOrden(Nodo r)
Algoritmo:
// Declaramos una variable que almacenara el próximo valor menor a la derecha del nodo raiz.
1. Var mínimo = r.dato//su valor inicial será el del nodo actual r
//Recorremos los nodos a la izquierda mientras no encontremos un nodo de tipo hoja
2. Mientras(r.izquierda ¡=null){
2.1 mínimo = r.izquierda.dato//actualizamos el valor mínimo
2.2 r = r.izquierda; //cambiamos al nodo actual al nodo al siguiente nodo a la izquierda
3.//Cuando encontremos un nodo padre sin nodo hijo izquierdo
Return mínimum; retornamos su valor que será el mínimo