130 likes | 388 Views
ÁRBOLES. Curso de Introducción a la Computación. Árboles binarios. Raiz. Un árbol binario es un conjunto de elementos que o está vacío o está dividido en tres subconjuntos desarticulados. El primer subconjunto tiene un solo elemento llamado raíz del árbol.
E N D
ÁRBOLES Curso de Introducción a la Computación
Árboles binarios Raiz Un árbol binario es un conjunto de elementos que o está vacío o está dividido en tres subconjuntos desarticulados. El primer subconjunto tiene un solo elemento llamado raíz del árbol. Los otros son en si mismos árboles binarios, llamados subárboles izquierdo y derecho del árbol original. Subárbol derecho Subárbol izquierdo
Representación y operaciones Supondremos al árbol consistente en nodos con tres campos: info, left y right. El campo info contiene la información útil, left es un apuntador a subárbol izquierdo y right es un apuntador al subárbol derecho. Las operaciones básicas con árboles son: maketree, setleft y setright. La función maketree(x) construye un árbol binario que consiste de un solo nodo con campo de información x y regresa el apuntador a dicho árbol.
Algoritmo para construir un árbol binario FUNCION MAKETREE(X: INFOTYPE) REGRESA NODOPTR 1. P ¬ GETNODE 2. INFO(P) ¬ X 3. LEFT(P) ¬ NIL 4. RIGHT(P) ¬ NIL 5 REGRESA P
Rutinas SetLeft y SetRight SUBRUTINA SETRIGHT(P: NODEPTR, X:INFOTYPE) 1. SI RIGHT(P) <> NIL ENTONCES a. ERROR "YA EXISTE EL SUBARBOL DERECHO" 2. RIGHT(P) ¬ MAKETREE(X) SUBRUTINA SETLEFT( P:NODEPTR, X:INFOTYPE) 1. SI LEFT(P) <> NIL ENTONCES a. ERROR "YA EXISTE EL SUBARBOL IZQUIERDO" 2. LEFT(P) ¬ MAKETREE(X)
Algoritmo para construir un árbol binario ordenado. SUBRUTINA PLACE(P:NODEPTR,X:INFOTYPE) 1. SI P=NIL ENTONCES a. P ¬ MAKETREE(X) 2. SINO a. SI X<INFO(P) ENTONCES 1. PLACE(LEFT(P),X) b. SI X>INFO(P) ENTONCES 1. PLACE(RIGHT(P),X) c. SI X=INFO(P) ENTONCES 1. WRITE "ELEMENTO REPETIDO"
Recorrido de árboles • Otra operación común es recorrer un árbol binario: esto es, pasar a través del árbol, enumerando cada uno de los nodos una vez. A esto se le llama visitar cada nodo. Existen al menos tres formas de recorrer un árbol: • En preorden • En entreorden • En posorden
Recorrido en preorden 1. Visitar primero la raíz. 2. Visitar el subarbol izquierdo en preorden. 3. Visitar el subarbol derecho en preorden. Algoritmo : SUBRUTINA PRETRAV(TREE:NODEPTR) 1. SI TREE<>NIL ENTONCES a. ESCRIBE INFO(TREE) b. PRETRAV(LEFT(TREE)) c. PRETRAV(RIGHT(TREE))
Recorrido en entreorden 1. Visitar el subarbol izquierdo en entreorden. 2. Visitar primero la raíz. 3. Visitar el subarbol derecho en entreorden. Algoritmo: SUBRUTINA INTRAV(TREE:NODEPTR) 1. SI TREE<>NIL ENTONCES a. INTRAV(LEFT(TREE)) b. ESCRIBE INFO(TREE) c. INTRAV(RIGHT(TREE))
Recorrido en posorden 1. Visitar el subarbol izquierdo en posorden. 2. Visitar el subarbol derecho en posorden. 3. Visitar primero la raíz. Algoritmo: SUBRUTINA POSTTRAV(TREE:NODEPTR) 1. SI TREE<>NIL ENTONCES a. POSTTRAV(LEFT(TREE)) b. POSTTRAV(RIGHT(TREE)) c. ESCRIBE INFO(TREE)
Algunas definiciones Árbol estrictamente binario – todos los nodos que no son hojas tienen subárbol izquierdo y derecho no vacíos. Profundidad – es el máximo nivel de cualquier hoja del árbol. Árbol binario completo – todos las hojas están en el último nivel. Árbol binario cuasi-completo – para un árbol de d niveles todos las hojas están en los niveles d o d–1 y para todo nodo nd con un descendiente derecho en el nivel d, todos los descendientes izquierdos de nd que sean hojas también estrán en el nivel d.
a a b c b c d e d e f g f g h i j k a a b c b c d e f g d e f g h i h h i
Diversas representaciones de árboles g Mediante niveles a c d g h l m n q d h a m c l q n Mediante paréntesis (g(d(a.(c..)).)(h.(m(l..)(q(n..).))))