Está en la página 1de 6

Julio Cesar Vasquez Garcia

27.777.893

Universidad De Los Andes

Facultad De ingeniería

Programacion 3

Resumen Arboles Binarios

Conceptos Base

Es una estructura de base de datos jerárquica, en líneas generales nos permiten


relacionar una cantidad considerable de nodos, con ítems o elementos dentro de
ellos, por medio de referencias.

Estructura

El nodo superior se llama raíz (root) del árbol. Los elementos que están
directamente debajo de un elemento se llaman sus hijos. El elemento directamente
encima de algo se llama su padre. Por ejemplo, 'a' es un hijo de 'f' y 'f' es el padre
de 'a'. Finalmente, los elementos sin hijos se llaman leaves.

Nodo

El nodo en específico es la posición en la estructura


que almacena un ítem, tiene 3 apuntadores
específicamente, su padre (gráficamente encima de
este), su derecha(gráficamente) y su
izquierda(gráficamente).
Nodo en código

struct Node {
int data;
struct Node* left;
struct Node* right;
// val es el valor que debe ser añadido a el dato en cuestion
Node(int val)
{
data = val;
// Left and right child del nodo se inicializaran en NULL
left = NULL;
right = NULL;
}
};

int main()
{
/*CREA root*/
struct Node* root = new Node(1);
/* Representación grafica del árbol una vez ejecutada la acción
1
/ \
NULL NULL
*/

root->left = new Node(2);


root->right = new Node(3);
/* 2 y 3 se convierten en left and right children de 1
1
/ \
2 3
/ \ / \
NULL NULL NULL NULL
*/

root->left->left = new Node(4);


/* 4 se convierte en left child de 2
1
/ \
2 3
/ \ / \
4 NULL NULL NULL
/ \
NULL NULL
*/
return 0;
}
Conceptos

Subárbol: es un subconjunto que se genera partiendo de tomar un nodo del lado


derecho e izquierdo como raíz, siguiendo la secuencia jerárquica desde este punto
seleccionado.

Depth: Son los pasos o conexiones existentes para llegar al nodo raíz desde un nodo
cualquiera, podría ejemplificarse como un árbol genealógico, sería el número de
ancestros existentes.

Height: Son los Pasos o conexiones existentes para llegar de un nodo leaf hasta un
nodo cualquiera. Podría verse como el fondo o la máxima profundidad del árbol.

Orden Transversal

Este es un esquema de identificación organizativa para los arboles parte del principio
de leer un árbol de izquierda a derecha desde sus leaves hasta el root y volviendo a
sus leaves.

Un ejemplo de orden transversal podría ser el siguiente:

Orden Transversal

5–2–6–1–3

Funciones

SubTree_first: Esta funcion retorna la raiz del primer subarbol del arbol en cuestion
para ello de manera grafica se retorna el nodo ubicado a la izq del arbol , es decir el
primer nodo asignado luego de LEFT=NULL

Sucessor Node:

Esta función retorna el nodo siguiente dependiendo de la secuencia transversal


existente.
1. Si existe un nodo right, su sucesor es el nodo ubicado graficamente a la izquierda.

2. De lo contrario, se debe recorrer el arbol (gráficamente hacia arriba) hasta que nodo
= nodo.parent.left.

Insert Item:

Consiste en agregar un nuevo item al árbol, gráficamente lo que se hace es insertar


un item siguiendo la jerarquía, la opción inicial es adjuntarlo al nodo right, de lo
contrario se usa la función sucesor() para agregarlo a la izquierda.

Eliminar Item:

Consiste en eliminar un item del árbol, si el item es leaves, es decir, no tiene hijos, se
elimina sin ningún otro paso adicional, ahora si es root por ejemplo que seria el caso
mas complicado, lo que se debe hacer es intercambiar posiciones con su predecesor
siguiendo el orden transversal hasta que el item a eliminar en cuestión quede como
un leaves y pueda eliminarse.

Si el nodo.left: implica que el predecesor es menor por lo que se intercambia el item


con el predecesor y se elimina este.

Si el nodo.Right: Se intercambia con el sucesor y se elimina el sucesor.

Binary Search Tree

Es un algoritmo de búsqueda implementado en bases de datos jerárquica, que


permite buscar un valor en específico, parte del ordenamiento suponiendo que el nodo
root está implícito como la mitad del árbol de esta manera empieza a buscar el valor
bajo criterios de mayor o menor, usando el orden transversal.

Bajo este esquema, si el item a ubicar fuera


“19”, se ubicaría primero a la raíz, al no ser
igual y ser mayor, empezaría a indagar
hacia la derecha encontrando sucesores
hasta encontrar el item en cuestión.

Esta función también es útil para insertar un


nuevo ítem, se realiza la búsqueda de
manera tal que se encuentre como si estuviera ahí, si existe la posición se sobrescribe
el valor, si no, la búsqueda se ira al final del árbol y en ese punto se podrá insertar l
item.

Para que este algoritmo pueda funcionar hay que tener en cuenta que es necesario
actualizar los tamaños correspondientes a los nodos, para ellos tenemos una
propiedad de los árboles binarios llamada

Subtree Augmentation

La cual se basa en que cada nodo en el árbol binario pueda guardar un numero
constante de campos adicionales. Por lo que en caso de que se altere el tamaño se
pueden actualizar las propiedades solo de los ancestros del nodo a afectar.

Subtree Propetys

Es permitido sumar, obtener el mínimo o máximo valor o el producto desde cualquier


característica de cada nodo, siempre y cuando este en el subárbol.

Las propiedades no permitidas son ubicar el índice o Depth, esto debido a que
tendríamos que depender de todos los nodos del árbol completo, por lo que se vuelve
muy pesado llevar esa cuenta, no como en las propiedades anteriores que dependen
de sus ancestros directamente, por lo que en resumen dependería directamente de
el subárbol de el nodo en cuestión.

Arboles AVL

Como medida para optimizar los tiempos y costos de procesamiento algorítmico,


arboles AVL permiten mantener un balance por medio de la función height balance,
que se encarga de que la diferencia entre el nodo izq y derecho no sea mayor a uno.

árbol AVL nodos balanceados Nodos desbalanceados


Si nos aseguramos de que la altura del árbol siga siendo optima después de cada
inserción y eliminación, podemos garantizar un límite superior de O(Logn) para todas
estas operaciones.

También podría gustarte