Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduccin
Los rboles de bsqueda son estructuras de datos que soportan las siguientes operaciones de conjuntos dinmicos: Search (Bsqueda), Minimum (Mnimo), Maximum (Mximo), Predecessor (Predecesor), Successor (Sicesor), Insert (Insercin), y Delete (eliminacin). Los rboles de bsqueda se pueden utilizar as como diccionarios y como colas de prioridad. Estas operaciones toman tiempo proporcional a la altura del rbol. Para un rbol completo binario, esto es (lg n) en el pero caso; sin embargo, si el rbol es una cadena lineal de n nodos, las mismas operaciones toman (n) en el pero caso. Para rboles creados aleatoriamente, la altura es O(lg n), con lo cual los tiempos son (lg n). Hay varios esquemas para mejorar el peor caso de los rboles de bsqueda. Dos de ellos son los rboles 2-3 y los rboles rojo-negro.
2
5 3 2 5 7 8
2 3 7 5 5 8
La propiedad del rbol de bsqueda nos permite imprimir o recorrer sus nodos en el orden de sus claves haciendo uso de un simple algoritmo recursivo.
TREE_NODE * Tree_Minimum( TREE_NODE * x) { if (x == NULL) return x; while (x->left != NULL ) x = x->left; return x; }
1)
5 3 10 6 7 12
16 20 18 23
15 5 16 12 10 6 7 13 18
z 20 23 6 3
15 5 12 10 7 13
10
20 18 23
2)
z 5 3 10 6 7 15 5 3 6 10 7 12 13
15 16 12 13 18 20 23 3
z 5
15 16 12 10 13 18 20 23
6 7 15 16 20 18 23 7 3 10 6 12 13 18 16 20 23
11
Eliminacin: Algoritmo
TREE_NODE * Tree-Delete(TREE_NODE **T, TREE_NODE * z) { TREE:_NODE * x; if (z->left == NULL || z->right == NULL) y = z; /* caso 1 y 2 */ else y = Tree_Successor(z); /* caso 3 */ /* hasta aqu y es un nodo con menos de dos hijos y debe ser extrado del rbol*/ if (y->left != NULL) x = y->left; else x = y->right; if (x != NULL) x->p = y->p; if (y->p == NULL) /* estoy eliminado el ltimo nodo */ *T = x; else if (y == y->p->left) /* y es hijo izquierdo */ y->p->left = x; else y->p->right = x; if (y !=z) /* caso 3 */ z->element = y->element; return y; } 12