Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cursada 2021
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Agenda
Definición
Descripción y terminología
Representaciones
Recorridos
Aplicación: Árboles de expresión
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Árbol Binario: Definición
Un árbol binario es una colección de nodos, tal
que:
• puede estar vacía
• puede estar formada por un nodo distinguido R,
llamado raíz y dos sub-árboles T1 y T2, donde la
raíz de cada subárbol Ti está conectado a R por
medio de una arista
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
Cada nodo puede tener a lo sumo dos nodos hijos.
Cuando un nodo no tiene ningún hijo se denomina
hoja.
Los nodos que tienen el mismo nodo padre se
denominan hermanos.
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
Conceptos a usar:
• Camino: desde n1 hasta nk, es una secuencia de nodos n1,
n2, ….,nk tal que ni es el padre de ni+1, para 1 ≤ i < k.
• La longitud del camino es el número de aristas, es decir k-1.
• Existe un camino de longitud cero desde cada nodo a sí mismo.
• Existe un único camino desde la raíz a cada nodo.
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Grado de ni es el número de hijos del nodo ni .
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
Profundidad(8) = 2
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
Profundidad(8) = 2
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Árbol binario lleno: Dado un árbol binario T de altura h,
diremos que T es lleno si cada nodo interno tiene grado 2
y todas las hojas están en el mismo nivel (h).
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Cantidad de nodos en un árbol binario lleno:
Sea T un árbol binario lleno de altura h, la cantidad de nodos
N es (2 h+1 – 1)
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Cantidad de nodos en un árbol binario lleno:
Sea T un árbol binario lleno de altura h, la cantidad de nodos
N es (2 h+1 – 1)
… … … … … ….
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Cantidad de nodos en un árbol binario lleno:
Sea T un árbol binario lleno de altura h, la cantidad de nodos
N es (2 h+1 – 1)
Nivel 0 20 nodos
Nivel 1 21 nodos
h
Nivel 2 22 nodos
Nivel 3 23 nodos
……
… … … … … ….
Nivel h 2h nodos
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Cantidad de nodos en un árbol binario lleno:
Sea T un árbol binario lleno de altura h, la cantidad de nodos
N es (2 h+1 – 1)
Nivel 0 20 nodos
Nivel 1 21 nodos N = 20 + 21 + 22 + 23+…+2h
h
Nivel 2 22 nodos La suma de los términos de
Nivel 3 23 nodos una serie geométrica de razón
2 es:
…… (2 h+1 – 1)
… … … … … ….
Nivel h 2h nodos
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Árbol binario completo: Dado un árbol binario T de altura h,
diremos que T es completo si es lleno de altura h-1 y el nivel h
se completa de izquierda a derecha.
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Árbol binario completo: Dado un árbol binario T de altura h,
diremos que T es completo si es lleno de altura h-1 y el nivel h
se completa de izquierda a derecha.
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Árbol binario completo: Dado un árbol binario T de altura h,
diremos que T es completo si es lleno de altura h-1 y el nivel h
se completa de izquierda a derecha.
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Árbol binario completo: Dado un árbol binario T de altura h,
diremos que T es completo si es lleno de altura h-1 y el nivel h
se completa de izquierda a derecha.
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Descripción y terminología
• Árbol binario completo: Dado un árbol binario T de altura h,
diremos que T es completo si es lleno de altura h-1 y el nivel h
se completa de izquierda a derecha.
• Si no, el árbol es lleno en la altura h-1 y tiene por lo menos un nodo en el nivel h:
N = (2h-1+1-1)+1=(2h -1 + 1)
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Representación
Hijo Izquierdo - Hijo Derecho
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Representación
Hijo Izquierdo - Hijo Derecho
A
A
B C
B C
D
E
E D G H
G H
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Recorridos
Preorden
Se procesa primero la raíz y luego sus hijos, izquierdo y
derecho.
Inorden
Se procesa el hijo izquierdo, luego la raíz y último el hijo
derecho
Postorden
Se procesan primero los hijos, izquierdo y derecho, y luego la
raíz
Por niveles
Se procesan los nodos teniendo en cuenta sus niveles,
primero la raíz, luego los hijos, los hijos de éstos, etc.
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Recorrido: Preorden
public void preorden() {
imprimir (dato);
si (tiene hijo_izquierdo)
hijoIzquierdo.preorden();
si (tiene hijo_derecho)
hijoDerecho.preorden();
}
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Recorrido: Por niveles
public void porNiveles() {
encolar(raíz);
mientras (cola no se vacíe) {
desencolar(v);
imprimir (dato de v);
si (tiene hijo_izquierdo)
encolar(hijo_izquierdo);
si (tiene hijo_derecho)
encolar(hijo_derecho);
}
}
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 1
b) 3
a) 7
7
9 8
8 9
10 11
10 11 18
c) 8
10
13 15
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 1
b) 3
a) 7 a)
7
inorden : 10 9 11 7 8
9 8
postorden : 10 11 9 8 7 8 9
10 11 preorden: 7 9 10 11 8
10 11 18
c) 8
10
13 15
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 1
b) 3
a) 7 a)
7
inorden : 10 9 11 7 8
9 8
postorden : 10 11 9 8 7 8 9
10 11 preorden: 7 9 10 11 8
10 11 18
b)
c) 8
inorden : 3 10 8 11 7 9 18
10 postorden : 10 11 8 18 9 7 3
preorden: 3 7 8 10 11 9 18
13 15
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 1
b) 3
a) 7 a)
7
inorden : 10 9 11 7 8
9 8
postorden : 10 11 9 8 7 8 9
10 11 preorden: 7 9 10 11 8
10 11 18
b)
c) 8 c)
inorden : 3 10 8 11 7 9 18
inorden : 13 10 15 8
10 postorden : 10 11 8 18 9 7 3
postorden : 13 15 10 8
preorden: 3 7 8 10 11 9 18
13 15 preorden: 8 10 13 15
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 1
b) 3
a) 7 a)
7
inorden : 10 9 11 7 8
9 8
postorden : 10 11 9 8 7 8 9
10 11 preorden: 7 9 10 11 8
10 11 18
b)
c) 8 c)
inorden : 3 10 8 11 7 9 18
inorden : 13 10 15 8
10 postorden : 10 11 8 18 9 7 3
postorden : 13 15 10 8
preorden: 3 7 8 10 11 9 18
13 15 preorden: 8 10 13 15
Ejercicio 2
Construya el árbol binario a partir del cual se obtuvieron los siguientes recorridos:
inorden: C B F E G A D I H y postorden: C F G E B I H D A
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 2.
Construya el árbol binario a partir del cual se obtuvieron los siguientes recorridos:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Resolución:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 2.
Construya el árbol binario a partir del cual se obtuvieron los siguientes recorridos:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Resolución:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Raíz
¿ Cómo seguimos ? A
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 2.
Construya el árbol binario a partir del cual se obtuvieron los siguientes recorridos:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Resolución:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Raíz
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 2.
Construya el árbol binario a partir del cual se obtuvieron los siguientes recorridos:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Resolución:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Raíz
sub. izq. sub. der.
A
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 2.
Construya el árbol binario a partir del cual se obtuvieron los siguientes recorridos:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Resolución:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Raíz
sub. izq. sub. der.
A
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 2.
Construya el árbol binario a partir del cual se obtuvieron los siguientes recorridos:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Resolución:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
B D
Repetimos los pasos anteriores y …
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación Árbol binario: Recorridos
Ejercicio 2.
Construya el árbol binario a partir del cual se obtuvieron los siguientes recorridos:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
Resolución:
inorden : C B F E G A D I H y postorden : C F G E B I H D A
A
B D
C H
E
F G I
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Árbol de Expresión
Es un árbol binario asociado a una expresión
aritmética
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Árbol de Expresión
Ejemplo:
/
* +
e f
+ -
a b c d
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Árbol de Expresión
Aplicaciones:
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Árbol de Expresión
/
Recorriendo el árbol, obtenemos:
* +
e f
+ -
a b c d
Inorden: (((a + b) * (c – d)) / (e + f))
Preorden: /*+ab-cd+ef
Postorden: ab+cd-*ef+/
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Construcción de un árbol de expresión
A partir de una:
1) Expresión postfija -
2 +
2) Expresión prefija * 5
3 4
3) Expresión infija
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Árboles binarios de expresión
Expresión algebraica :
* +
+ e
*
a * c
f g
b d
Algoritmo:
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
a
P1
P1
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
a
P2 P1 b
P1
P2
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
P3 a
P2 P1 b d
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
R1
P3 a *
P2 P1 b d
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
R1
a *
P2 P3 P1 b d
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
R1
a *
P2
P1 b d
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
R1
a *
R1
P1 b d
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
R1
P4 a * c
R1
P1 b d P4
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
P4 R2
+
R1
a * c
R1
P1 b d P4
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
R1 R2
+
R1
a * c
P1 b d P4
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ +
R2
+
R1
a * c
R2 P1 b d P4
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ + R3
* R2
+
R1
a * c
R2 P1 b d P4
P1
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ + R3
R2
* R2
P1 +
R1
a * c
P1 b d P4
R3
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
abd*c+* e f g*+ + R3
* R2
+
R1
a * c
P1 b d P4
R3
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
1) Construcción de un árbol de expresión a partir de
una expresión postfija
Expresión postfija: a b d * c + * e f g * + + +
Algoritmo:
tomo un carácter de la expresión
* +
mientras ( existe carácter ) hacer
si es un operando creo un nodo y lo apilo. + e
si es un operador (lo tomo como la raíz de los dos últimos nodos creados) *
- creo un nodo R,
- desapilo y lo agrego como hijo derecho de R
a * c
b f g
- desapilo y lo agrego como hijo izquierdo de R
- apilo R.
d
tomo otro carácter
fin
R6
abd*c+* e f g*+ + R3
+
* R2
+
+ e
R1 *
a * c
b f g
P1 d P4
R6
P2 P3
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
2) Construcción de un árbol de expresión a partir de
una expresión prefija
Algoritmo:
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
3) Construcción de un árbol de expresión a partir de
una expresión infija
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
3) Construcción de un árbol de expresión a partir de
una expresión infija
Árbol de Expresión
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
-Convertir una expresión infija en árbol de expresión: se debe
convertir la expresión infija en postfija (i) y a partir de ésta,
construir el árbol de expresión (ii).
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Operadores ordenados de mayor a menor según su
prioridad:
˄ (potencia)
*, / (multiplicación y división)
+, - (suma y resta)
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Ejercitación
Árbol binario de expresión
Ejercicio 1.
Dada la siguiente expresión postfija : I J K + + A B * C - * , dibuje su
correspondiente árbol binario de expresión
Convierta la expresión ((a + b) + c * (d + e) + f ) * (g + h) en expresión prefija
Ejercicio 2.
Dada la siguiente expresión prefija : * + I + J K - C * A B , dibuje su
correspondiente árbol binario de expresión
Convierta la expresión ((a + b) + c * (d + e) + f ) * (g + h) en expresión postfija
Prof. Alejandra Schiavoni – Prof. Catalina Mostaccio Algoritmos y Estructuras de Datos 2021
Arboles Generales
Estructura
Fragmento de código que crea un árbol general e invoca el recorrido pre_Orden() (puede ser una main en una clase de test)
ArbolGeneral<String> a1 = new ArbolGeneral<String>("1");
ArbolGeneral<String> a2 = new ArbolGeneral<String>("2");
ArbolGeneral<String> a3 = new ArbolGeneral<String>("3");
ListaGenerica<ArbolGeneral<String>> hijos = new ListaEnlazadaGenerica<ArbolGeneral<String>>();
hijos.agregarFinal(a1); hijos.agregarFinal(a2); hijos.agregarFinal(a3);
ArbolGeneral<String> a = new ArbolGeneral<String>("0", hijos);
ListaGenerica<ArbolGeneral<String>> hijos_a1 = new ListaEnlazadaGenerica<ArbolGeneral<String>>();
ArbolGeneral<String> a11 = new ArbolGeneral<String>("11");
ArbolGeneral<String> a12 = new ArbolGeneral<String>("12");
hijos_a1.agregarFinal(a11); hijos_a1.agregarFinal(a12);
a1.setHijos(hijos_a1);
System.out.println("Datos en preorden: "+a.pre_Orden());
/**
* Contar las hojas del arbol general
*/
public int contarHojas() {
if (this.esHoja())
return 1;
else {
int cont = 0;
ListaGenerica<ArbolGeneral2<T>> lista = this.getHijos();
lista.comenzar();
while (!lista.fin()) {
ArbolGeneral2<T> arbol = lista.proximo();
cont = cont + arbol.contarHojas();
}
return cont;
}
}
Animal
Dado un árbol general compuesto por personajes, donde Coyote
puede haber dragones, princesas y otros, se denominan Animal
Scooby Animal
nodos accesibles a aquellos nodos tales que a lo largo del Dragón Cid
Animal
camino del nodo raíz del árbol hasta el nodo (ambos Negro
Tweety
inclusive) no se encuentra ningún dragón. Princesa Princesa
Cenicienta Dragón Animal La Bella
Rojo Pluto
Implementar un método que devuelva una lista con un camino desde la raíz a una Princesa sin
pasar por un Dragón –sin necesidad de ser el más cercano a la raíz-. Asuma que existe al menos un
camino accesible.
Animal
Ejercicio de parcial – Encontrar a la Princesa Scooby
Cid
Dragón
Versión I Negro
Animal
Tweety
public class Juego { Princesa Princesa
Cenicienta Dragón A ni m al La Bella
Rojo P luto
public void encontrarPrincesa(ArbolGeneral<Personaje> arbol) {
ListaGenerica<Personaje> lista = new ListaEnlazadaGenerica<Personaje>();
lista.agregarInicio(arbol.getDato());
ListaGenerica<Personaje> camino = new ListaEnlazadaGenerica<Personaje>();
encontrarPrincesa(arbol, lista, camino);
System.out.print("Se encontró a la Princesa en el camino: " + camino);
}
private void encontrarPrincesa(ArbolGeneral<Personaje> arbol, ListaGenerica<Personaje> lista,
ListaGenerica<Personaje> camino) {
Personaje p = arbol.getDato();
if (p.esPrincesa()) {
clonar(lista, camino);
}
if (camino.esVacia()) {
ListaGenerica<ArbolGeneral<Personaje>> lHijos = arbol.getHijos();
lHijos.comenzar();
while (!lHijos.fin() && camino.esVacia()) {
ArbolGeneral<Personaje> aux = lHijos.proximo();
if (!aux.getDato().esDragon()) { public void clonar(L
istaGenerica<Persona
lista.agregarFinal(aux.getDato()); je> origen,
ListaGenerica<Person
encontrarPrincesa(aux, lista, camino); origen.comenzar(); aj e> destino) {
lista.eliminarEn(lista.tamanio()); while (!origen.fin()
) {
} destino.agregarFinal
(origen.proximo());
} }
} }
}
}
Algoritmos y Estructuras de Datos 2021 Prof: Laura Fava - Pablo Iuliano
Arboles Generales
Ejercicio de parcial – Encontrar a la Princesa
Versión II
public class Juego {
package parcial.juego;
…
public class JuegoTest { Animal
public static void main(String[] args) { Coyote
Personaje p0 = new Personaje("Scooby", "Animal"); Animal
Personaje p1 = new Personaje("Cenicienta", "Princesa"); Scooby Animal
Personaje p2 = new Personaje("Rojo", "Dragon"); Dragón Cid
Personaje p3 = new Personaje("Pluto", "Animal"); Animal
Negro
Personaje p4 = new Personaje("Negro", "Dragon"); Tweety
Personaje p5 = new Personaje("La Bella", "Princesa"); Princesa Princesa
Cenicienta Dragón A nim al La Bella
Personaje p6 = new Personaje("Tweety", "Animal");
Personaje p7 = new Personaje("Cid", "Animal"); Rojo P luto
Personaje p8 = new Personaje("Coyote", "Animal");
ArbolGeneral<Personaje> a1 = new ArbolGeneral<Personaje>(p0);
ArbolGeneral<Personaje> a21 = new ArbolGeneral<Personaje>(p1);
ArbolGeneral<Personaje> a22 = new ArbolGeneral<Personaje>(p2);
ArbolGeneral<Personaje> a23 = new ArbolGeneral<Personaje>(p3);
ListaGenerica<ArbolGeneral<Personaje>> hijosa2 = new ListaEnlazadaGenerica<ArbolGeneral<Personaje>>();
hijosa2.agregarFinal(a21);
hijosa2.agregarFinal(a22);
hijosa2.agregarFinal(a23);
ArbolGeneral<Personaje> a2 = new ArbolGeneral<Personaje>(p4, hijosa2);
. . .
ArbolGeneral<Personaje> a = new ArbolGeneral<Personaje>(p8, hijos);
Juego juego = new Juego();
juego.encontrarPrincesa(a);
}
}
-Si toda la imagen tiene un mismo color, la misma es representada por un único
nodo que almacene un dato que represente a ese color.
El artista desea saber cuántos pixeles de color negro posee una imagen dada. Usted
debe implementar un método, que dado un quadtree y una cantidad total de pixeles,
cuente cuantos pixeles de color negro contiene la imagen codificada en él.
System.out.println("Los pixeles de color negro que posee la imagen es " + contar(raiz, 1024));
}
}
Algoritmos y Estructuras de Datos–2021 Prof: Fava - Iuliano
Arboles Generales
Ejercicio de parcial - Quadtree
package parcial.quadtree;
. . . .