3-sld-inher es [modo de compatibilidad]2-arboles_es.pdf · 15 • un nodo es externo, si no tiene...
TRANSCRIPT
![Page 1: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/1.jpg)
Árboles
Departamento de Ingeniería Telemática
Programación de sistemas
1
![Page 2: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/2.jpg)
Concepto de árbol
Terminología
Implementación
Casos especiales
Árboles binarios de búsqueda
Montículos (heaps)
Contenidos
2
![Page 3: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/3.jpg)
3
Un árbol es una estructura
de datos no lineal que
almacena los elementos
jerárquicamente
Concepto de árbol
![Page 4: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/4.jpg)
4
Ejemplos
1. Clasificación de la información en una
enciclopedia
![Page 5: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/5.jpg)
5
Ejemplos
2. Sistema de ficheros
![Page 6: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/6.jpg)
6
Ejemplos
3. Estructura organizativa de una empresa
4. Estructura de rangos del ejército
5. Estructura de un libro
…
![Page 7: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/7.jpg)
7
Definición no recursiva
• Un árbol consiste en un conjunto de nodos
y un conjunto de aristas, de forma que:
o Se distingue un nodo llamado raíz
o A cada nodo h (hijo), excepto la raíz, le llega
una arista de otro nodo p (padre)
o Para cada nodo hay un camino (secuencia de
aristas) único desde la raíz.
o Los nodos que no tienen hijos se denominan
hojas
![Page 8: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/8.jpg)
8
Definición no recursiva
![Page 9: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/9.jpg)
9
Definición recursiva
• Un árbol es:
o Vacío
o Un nodo y cero o más árboles conectados
al nodo mediante una arista
* A los árboles que se conectan al nodo raíz los denominaremos
también “subárboles”
![Page 10: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/10.jpg)
10
Definición recursiva
![Page 11: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/11.jpg)
11
Definición recursiva
![Page 12: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/12.jpg)
12
Definición recursiva
![Page 13: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/13.jpg)
13
Definición recursiva
![Page 14: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/14.jpg)
14
Definición recursiva
![Page 15: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/15.jpg)
15
• Un nodo es externo, si no tiene hijos (es hoja)
o Según la definición recursiva: si todos los subárboles
conectados a ese nodo están vacíos
• Un nodo es interno, si tiene uno o más hijos
o Según la definición recursiva: si alguno de los subárboles
conectados a ese nodo no está vacío
• Un nodo es ascendiente de otro, si es padre
de él o ascendiente de su padre.
• Un nodo es descendiente de otro, si este último
es ascendiente del primero
o Los descendientes de un nodo forman un subárbol en el
que ese nodo hace de raíz
Terminología
![Page 16: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/16.jpg)
16
• Un camino de un nodo a otro, es una secuencia de
aristas consecutivas que llevan del primero al
segundo
o La longitud del camino es el número de aristas
• La profundidad de un nodo es la longitud del
camino de la raíz a ese nodo
• La altura de un árbol es el valor de la
profundidad del nodo más profundo
• El tamaño de un árbol es el número de nodos
que contiene
Terminología
![Page 17: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/17.jpg)
17
Ejemplo
Nodo Altura Profundidad Tamaño Int./Ext.
a 2 0 7 Interno
b 1 1 3 Interno
c 0 1 1 Externo
d 0 1 1 Externo
e 0 1 1 Externo
f 0 2 1 Externo
g 0 2 1 Externo
![Page 18: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/18.jpg)
• Completa la tabla para el siguiente árbol Nodo Altura Profundidad Tamaño Int./Ext.
a 3 0 11 Interno
b 1 1 3 Interno
c 0 1 1 Externo
d 1 1 2 Interno
e 2 1 4 Interno
f 0 2 1 Externo
g 0 2 1 Externo
h 0 2 1 Externo
i 0 2 1 Externo
j 1 2 2 Interno
k 0 3 1 Externo
Ejercicio 1
![Page 19: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/19.jpg)
19
• Un árbol es ordenado, si para cada nodo
existe un orden lineal para todos sus hijos
Terminología: Árbol ordenado
![Page 20: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/20.jpg)
20
• Un árbol binario es un árbol ordenado en el
que cada nodo tiene 2 árboles (izquierdo y
derecho). o Árbol binario según la definición recursiva de árbol
o Los árboles izquierdo y/o derecho pueden estar vacíos
* En general, suponemos árboles binarios para simplificar
la implementación de los árboles
Terminología: Árbol binario
![Page 21: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/21.jpg)
21
La interfaz BTree
public interface BTree<E> {
static final int LEFT = 0;
static final int RIGHT = 1;
boolean isEmpty();
E getInfo() throws BTreeException;
BTree<E> getLeft() throws BTreeException;
BTree<E> getRight() throws BTreeException;
void insert(BTree<E> tree, int side) throws BTreeException;
BTree<E> extract(int side) throws BTreeException;
String toStringPreOrder();
String toStringInOrder();
String toStringPostOrder();
String toString(); // preorder
int size();
int height();
boolean equals(BTree<E> tree);
boolean find(BTree<E> tree);
}
![Page 22: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/22.jpg)
22
• Implementación basada en arrays
Una interfaz varias implementaciones
Subárbol izquierdo Posición nodo raíz * 2
Subárbol derecho Posición nodo raíz * 2 +1
![Page 23: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/23.jpg)
23
• Implementación basada en enlaces Linked Binary Node (LBNode)
Linked Binary Tree (LBTree)
Cada árbol (LBTree) tiene un nodo raíz (atributo LBNode)
Cada nodo raíz LBNode apunta a dos árboles (atributos LBTree), los
cuales pueden estar vacíos (null)
Una interfaz varias implementaciones
![Page 24: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/24.jpg)
24
La clase LBNode
public class LBNode<E> {
private E info;
private BTree<E> left;
private BTree<E> right;
public LBNode(E info, BTree<E> left, BTree<E> right) {…}
public E getInfo() {…}
public void setInfo(E info) {…}
public BTree<E> getLeft() {…}
public void setLeft(BTree<E> left) {…}
public BTree<E> getRight() {…}
public void setRight(BTree<E> right){…}
}
![Page 25: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/25.jpg)
• Completa la implementación de
la clase LBNode.
Ejercicio 2
25
![Page 26: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/26.jpg)
26
La clase LBTree
public class LBTree<E> implements BTree<E> {
private LBNode<E> root;
public LBTree() {
root = null;
}
public LBTree(E info) {
root = new LBNode<E>(info, new LBTree<E>(), new LBTree<E>());
}
public boolean isEmpty() {
return (root == null);
}
…
![Page 27: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/27.jpg)
27
La clase LBTree
…
public E getInfo() throws BTreeException {
if (isEmpty()) {
throw new BTreeException("empty trees do not have info");
}
return root.getInfo();
}
public BTree<E> getLeft() throws BTreeException {
if (isEmpty()) {
throw new BTreeException("empty trees do not have a left child");
}
return root.getLeft();
}
public BTree<E> getRight() throws BTreeException {
if (isEmpty()) {
throw new BTreeException("empty trees do not have a right child");
}
return root.getRight();
}
…
![Page 28: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/28.jpg)
28
• Tamaño: size()
• Altura: height()
• Recorridos o Pre-orden: toStringPreOrder()
o In-orden: toStringInOrder()
o Post-orden: toStringPostOrder()
Algoritmos básicos
![Page 29: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/29.jpg)
29
La clase LBTree: size()
public int size() {
if (isEmpty()) {
return 0;
} else {
return 1 + root.getLeft().size()
+ root.getRight().size();
}
}
![Page 30: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/30.jpg)
30
La clase LBTree: height()
public int height() { if (isEmpty()) {
return -1;
} else {
int leftHeight = root.getLeft().height();
int rightHeight = root.getRight().height();
if (leftHeight > rightHeight) {
return 1 + leftHeight;
} else {
return 1 + rightHeight;
}
}
}
![Page 31: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/31.jpg)
31
Recorrido de Euler
![Page 32: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/32.jpg)
32
Recorrido Pre-orden
Primero el nodo raíz Después sus hijos
(recursivamente)
![Page 33: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/33.jpg)
33
La clase LBTree:
toStringPreOrder()
public String toStringPreOrder() {
if (isEmpty()) {
return "";
} else {
return root.getInfo().toString() + " " +
root.getLeft().toStringPreOrder() +
root.getRight().toStringPreOrder();
}
}
![Page 34: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/34.jpg)
34
Recorrido Post-orden
Primero los hijos (recursivamente)
Después el nodo raíz
![Page 35: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/35.jpg)
35
La clase LBTree:
toStringPostOrder()
public String toStringPostOrder() {
if (isEmpty()) {
return "";
} else {
return root.getLeft().toStringPostOrder() +
root.getRight().toStringPostOrder() +
root.getInfo().toString() + " ";
}
}
![Page 36: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/36.jpg)
36
Recorrido In-orden (simétrico)
Primero el hijo izquierdo (recursivamente)
Después el nodo raíz Después el hijo derecho
(recursivamente)
![Page 37: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/37.jpg)
37
La clase LBTree:
toStringInOrder()
public String toStringInOrder() {
if (isEmpty()) {
return "";
} else {
return root.getLeft().toStringInOrder() +
root.getInfo().toString() + " " +
root.getRight().toStringInOrder();
}
}
![Page 38: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/38.jpg)
Ejercicio 3
38
• Dado el siguiente árbol binario, indica qué
recorrido (pre-orden, in-orden, post-orden)
produce el resultado (A+B)*(C-D).
![Page 39: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/39.jpg)
Árboles (II)
Departamento de Ingeniería Telemática
Programación de sistemas
![Page 40: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/40.jpg)
Concepto de árbol
Terminología
Implementación
Casos especiales
Árboles binarios de búsqueda
Montículos (heaps)
Contenidos
40
![Page 41: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/41.jpg)
Notación
• Hasta ahora:
o Un nodo, tres atributos: información almacenada,
subárbol izquierdo y subárbol derecho
o Un árbol, un atributo: nodo raíz
• Al pintar un árbol representamos la información
almacenada como el contenido de cada nodo
41
![Page 42: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/42.jpg)
Notación
• A partir de ahora:
o Añadimos un atributo más: la clave (key)
• Facilita la utilización del árbol en operaciones de búsqueda,
inserción, eliminación
• Dependiendo de la implementación, la clave puede añadirse
como atributo del nodo o como atributo del árbol
4
8 2
9 6 3 1
*
+ -
A B C D
Al pintar el árbol
Color oscuro: Clave
Color claro: Información
42
![Page 43: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/43.jpg)
Ejemplo de uso de claves
• Colas con prioridad
o Estructura de datos lineal que devuelve los elementos de
acuerdo con el valor de una clave que determina la
prioridad y no al orden en que fueron insertados
COLA CON PRIORIDAD
E U U Q E
3 2 4 1 5
Q U E U E
43
*1 Valor de prioridad máximo
![Page 44: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/44.jpg)
Ejemplo de uso de claves
• Colas con prioridad
o Implementación 1: Comparar al insertar
Facilita la extracción
o Implementación 2: Comparar al extraer
Facilita la inserción
44
![Page 45: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/45.jpg)
• Concepto de árbol binario de búsqueda
• Operaciones
– Búsqueda
– Inserción
– Eliminación
Árboles binarios de búsqueda
45
![Page 46: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/46.jpg)
Árboles binarios de búsqueda:
Concepto
• Un árbol binario de búsqueda es un árbol binario en el que para cada nodo n,
todas las claves de los nodos del subárbol izquierdo son menores que la clave de n (o iguales)
y todas las del subárbol derecho mayores (o iguales).
46
![Page 47: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/47.jpg)
47
Ejemplo (I)
4
8 2
9 6 3 1
7 5 3
Representación únicamente de las claves (no se incluye la información almacenada)
Implementación errónea (en el subárbol izquierdo de “2” hay una clave mayor que 2)
![Page 48: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/48.jpg)
48
Ejemplo (II)
4
8
2
9 6
3 1
7
5
Implementación correcta de árbol binario de búsqueda
![Page 49: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/49.jpg)
Operación: Búsqueda
Buscamos el “3”:
• 3<4: Subárbol izquierdo
• 3>2: Subárbol derecho
• 3=3: Elemento encontrado
49
4
8 2
9 6 3 1
7 5
4
2
3
http://www.cosc.canterbury.ac.nz/mukundan/dsal/BST.html
![Page 50: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/50.jpg)
Operación: Inserción
Insertar “6”:
• 6<7: Subárbol izquierdo
• 6>2: Subárbol derecho
• 6>5: Subárbol derecho
• Hueco libre: insertar
50
7
9 2
5 1
3 6
7
2
5
![Page 51: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/51.jpg)
Ejercicio 4
• Dado el siguiente árbol binario de búsqueda,
inserta en orden tres elementos que contienen las
siguientes claves: 4, 8 y 5
7
9 2
5 1
3 6
7
2
5
51
![Page 52: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/52.jpg)
Operación: Eliminar (I)
Si los subárboles izquierdo y derecho están vacíos (“hoja”)
• Eliminar directamente
• Por ejemplo, eliminar “3”
52
7
9 2
5 1
3 6
7
2
5
![Page 53: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/53.jpg)
Operación: Eliminar (II)
Si uno de los dos subárboles está vacío
• Reemplazar por el nodo raíz del subárbol no vacío
• Por ejemplo, eliminar “5”
53
7
9 2
5 1
6
7
2
5 6
![Page 54: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/54.jpg)
Operación: Eliminar (III)
Si ninguno de los subárboles está vacío
• Reemplazar por el mayor del subárbol izquierdo o el menor del subárbol derecho
• Por ejemplo, eliminar “2”
o Reemplazar por “1” o por “3”
54
7
9 2
5 1
3 6
7
2
5
3
http://www.ibr.cs.tu-bs.de/courses/ss98/audii/applets/BST/BST-Example.html
![Page 55: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/55.jpg)
Ejercicio 5
• Dado el siguiente árbol binario de búsqueda,
elimina el elemento cuya clave es 7. Propón dos
formas de realizar dicha operación
7
9 2
5 1
3
7
2
5
55
![Page 56: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/56.jpg)
• Un montículo (binario) es un árbol binario completo en el que cada nodo tiene una clave mayor(*) o igual que la de su padre. – Normalmente, un montículo se refiere a
montículo binario
– * También podría definirse como menor o igual (el orden es arbitrario)
• Aplicaciones: – Colas con prioridad
– Ordenación
56
Montículos (heaps)
![Page 57: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/57.jpg)
Montículos: propiedades
1. Para cada nodo n (excepto para el raíz), su clave es mayor o igual que la de su padre.
2. Completo – Para una profundidad K, todos los subárboles hasta K-1 están no vacíos
y en K los árboles no vacíos están colocados de izquierda a derecha
57
Completo
No Completo
No Completo
![Page 58: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/58.jpg)
Ejemplo (I)
58
1
4 2
9 6 5 3
7 8
No es un montículo. Cumple la propiedad 1 pero no la 2
![Page 59: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/59.jpg)
Ejemplo (II)
59
7
6 5
3 4 8 2
1 9
No es un montículo. Cumple la propiedad 2 pero no la 1
![Page 60: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/60.jpg)
Ejemplo (III)
60
1
4 2
9 6 5 3
7 8
Sí es un montículo
![Page 61: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/61.jpg)
Implementación basada en secuencias
61
1
3 2
7 6 5 4
1 2 3 4 5 6 7
p(root)=1
p(x.left)=2*p(x)
p(x.right)=2*p(x)+1
![Page 62: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/62.jpg)
Insertar
62
4
6 5
20 7 9 15
25 16 12 14 8 11
Insertar elemento con clave “2”
![Page 63: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/63.jpg)
Insertar
63
4
6 5
20 7 9 15
25 16 12 14 8 11 2
Insertar elemento con clave “2”
![Page 64: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/64.jpg)
Insertar
64
4
6 5
2 7 9 15
25 16 12 14 8 11 20
Insertar elemento con clave “2”
![Page 65: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/65.jpg)
Insertar
65
4
2 5
6 7 9 15
25 16 12 14 8 11 20
Insertar elemento con clave “2”
![Page 66: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/66.jpg)
Insertar
66
2
4 5
6 7 9 15
25 16 12 14 8 11 20
Insertar elemento con clave “2”
![Page 67: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/67.jpg)
Ejercicio 6
• Dado el siguiente montículo, inserta tres
elementos con claves 3, 8 y 1.
2
4 5
6 7 9 15
25 16 12 14 8 11 20 67
![Page 68: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/68.jpg)
Eliminar
68
4
6 5
20 7 9 15
25 16 12 14 8 11
Eliminar elemento con clave “4”
![Page 69: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/69.jpg)
Eliminar
69
8
6 5
20 7 9 15
25 16 12 14 11
4
![Page 70: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/70.jpg)
Eliminar
70
5
6 8
20 7 9 15
25 16 12 14 11
Eliminar elemento con clave “4”
![Page 71: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/71.jpg)
Ejercicio 7
71
• Dado el siguiente montículo, elimina tres
elementos con claves 15, 5 y 7.
5
6 8
20 7 9 15
25 16 12 14 11
![Page 72: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/72.jpg)
Ejemplo Montículo - Cola con prioridad
http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Priority-Q/
![Page 73: 3-sld-inher es [Modo de compatibilidad]2-arboles_es.pdf · 15 • Un nodo es externo, si no tiene hijos (es hoja) o Según la definición recursiva: si todos los subárboles conectados](https://reader036.vdocuments.co/reader036/viewer/2022070819/5f19f0cd823de533b252339b/html5/thumbnails/73.jpg)
Ejemplo Montículo - Cola con prioridad
http://www.cosc.canterbury.ac.nz/mukundan/dsal/MinHeapAppl.html