0% encontró este documento útil (0 votos)
40 vistas9 páginas

Visualización y Manipulación de Árboles Binarios

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
40 vistas9 páginas

Visualización y Manipulación de Árboles Binarios

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

EJERCICIO NÚMERO 1

import [Link] as plt


import networkx as nx

class Nodo:
def __init__(self, valor):
[Link] = valor
[Link] = None
[Link] = None

def dibujar_arbol(ax, nodo, x, y, delta_x, delta_y):


if nodo is None:
return
[Link](x, y, s=300, facecolors='none', edgecolors='blue') #
Dibuja el nodo actual
[Link](x, y, str([Link]), ha='center', va='center',
fontsize=12) # Etiqueta el nodo con su valor
if [Link]:
[Link]([x, x - delta_x], [y, y - delta_y], '-k') # Dibuja
la línea hacia el hijo izquierdo
dibujar_arbol(ax, [Link], x - delta_x, y - delta_y,
delta_x/2, delta_y)
if [Link]:
[Link]([x, x + delta_x], [y, y - delta_y], '-k') # Dibuja
la línea hacia el hijo derecho
dibujar_arbol(ax, [Link], x + delta_x, y - delta_y,
delta_x/2, delta_y)

# Crear un árbol binario


arbol = Nodo(15)
[Link] = Nodo(7)
[Link] = Nodo(18)
[Link] = Nodo(16)
[Link] = Nodo(3)
[Link] = Nodo(4)
[Link] = Nodo(2)
[Link] = Nodo(0)
[Link] = Nodo(12)
[Link] = Nodo(11)
[Link] = Nodo(19)
[Link] = Nodo(16)
[Link] = Nodo(17)
[Link] = Nodo(31)
[Link] = Nodo(22)

# Configurar el gráfico
fig, ax = [Link]()
ax.set_aspect('equal')
[Link]('off')

# Dibujar el árbol
dibujar_arbol(ax, arbol, 0, 0, 1, 1)

[Link]("Árbol Binario")
[Link]()

def inorden(nodo):
if nodo is None:
return []
return inorden([Link]) + [[Link]] +
inorden([Link])

def postorden(nodo):
if nodo is None:
return []
return postorden([Link]) + postorden([Link]) +
[[Link]]

def preorden(nodo):
if nodo is None:
return []
return [[Link]] + preorden([Link]) +
preorden([Link])

print("Recorrido en orden (inorden):", inorden(arbol))


print("Recorrido postorden:", postorden(arbol))
print("Recorrido preorden:", preorden(arbol))
EJERCICIO NÚMERO 2
import [Link] as plt
import networkx as nx

class Nodo:
def __init__(self, valor):
[Link] = valor
[Link] = None
[Link] = None

def dibujar_arbol(ax, nodo, x, y, delta_x, delta_y):


if nodo is None:
return
[Link](x, y, s=300, facecolors='none', edgecolors='blue') #
Dibuja el nodo actual
[Link](x, y, str([Link]), ha='center', va='center',
fontsize=12) # Etiqueta el nodo con su valor
if [Link]:
[Link]([x, x - delta_x], [y, y - delta_y], '-k') # Dibuja
la línea hacia el hijo izquierdo
dibujar_arbol(ax, [Link], x - delta_x, y - delta_y,
delta_x/2, delta_y)
if [Link]:
[Link]([x, x + delta_x], [y, y - delta_y], '-k') # Dibuja
la línea hacia el hijo derecho
dibujar_arbol(ax, [Link], x + delta_x, y - delta_y,
delta_x/2, delta_y)

# Crear un árbol binario


arbol = Nodo("A")
[Link] = Nodo("B")
[Link] = Nodo("C")
[Link] = Nodo("D")
[Link] = Nodo("E")
[Link] = Nodo("H")
[Link] = Nodo("I")
[Link] = Nodo("F")
[Link] = Nodo("G")
[Link] = Nodo("J")

fig, ax = [Link]()
ax.set_aspect('equal')
[Link]('off')

# Dibujar el árbol
dibujar_arbol(ax, arbol, 0, 0, 1, 1)

[Link]("Árbol Binario")
[Link]()

def inorden(nodo):
if nodo is None:
return []
return inorden([Link]) + [[Link]] +
inorden([Link])

def postorden(nodo):
if nodo is None:
return []
return postorden([Link]) + postorden([Link]) +
[[Link]]

def preorden(nodo):
if nodo is None:
return []
return [[Link]] + preorden([Link]) +
preorden([Link])

print("Recorrido en orden (inorden):", inorden(arbol))


print("Recorrido postorden:", postorden(arbol))
print("Recorrido preorden:", preorden(arbol))
EJERCICIO NÚMERO 3
import [Link] as plt
import networkx as nx

class Nodo:
def __init__(self, valor):
[Link] = valor
[Link] = None
[Link] = None

def dibujar_arbol(ax, nodo, x, y, delta_x, delta_y):


if nodo is None:
return
[Link](x, y, s=300, facecolors='none', edgecolors='blue') #
Dibuja el nodo actual
[Link](x, y, str([Link]), ha='center', va='center',
fontsize=12) # Etiqueta el nodo con su valor
if [Link]:
[Link]([x, x - delta_x], [y, y - delta_y], '-k') # Dibuja
la línea hacia el hijo izquierdo
dibujar_arbol(ax, [Link], x - delta_x, y - delta_y,
delta_x/2, delta_y)
if [Link]:
[Link]([x, x + delta_x], [y, y - delta_y], '-k') # Dibuja
la línea hacia el hijo derecho
dibujar_arbol(ax, [Link], x + delta_x, y - delta_y,
delta_x/2, delta_y)

# Crear un árbol binario


arbol = Nodo("D")
[Link] = Nodo("A")
[Link] = Nodo("V")
[Link] = Nodo("I")
[Link] = Nodo("B")
[Link] = Nodo("J")
[Link] = Nodo("U")

# Configurar el gráfico
fig, ax = [Link]()
ax.set_aspect('equal')
[Link]('off')

# Dibujar el árbol
dibujar_arbol(ax, arbol, 0, 0, 1, 1)

[Link]("Árbol Binario")
[Link]()

def inorden(nodo):
if nodo is None:
return []
return inorden([Link]) + [[Link]] +
inorden([Link])

def postorden(nodo):
if nodo is None:
return []
return postorden([Link]) + postorden([Link]) +
[[Link]]

def preorden(nodo):
if nodo is None:
return []
return [[Link]] + preorden([Link]) +
preorden([Link])

print("Recorrido en orden (inorden):", inorden(arbol))


print("Recorrido postorden:", postorden(arbol))
print("Recorrido preorden:", preorden(arbol))
Generar un árbol binario a partir de los números aleatorios ingresados
por el usuario.

import [Link] as plt


import networkx as nx

class Nodo:
def __init__(self, valor):
[Link] = valor
[Link] = None
[Link] = None

def agregar_nodo(nodo, valor):


if nodo is None:
return Nodo(valor)
if valor < [Link]:
[Link] = agregar_nodo([Link], valor)
elif valor > [Link]:
[Link] = agregar_nodo([Link], valor)
return nodo

def agregar_nodos_grafo(nodo, G, pos, nivel, x):


if nodo:
pos[[Link]] = (x, -nivel * 100)
if [Link]:
G.add_node([Link])
G.add_edge([Link], [Link])
agregar_nodos_grafo([Link], G, pos, nivel + 1, x - 2**(4-nivel))
if [Link]:
G.add_node([Link])
G.add_edge([Link], [Link])
agregar_nodos_grafo([Link], G, pos, nivel + 1, x + 2**(4-nivel))

# Crear un árbol binario


arbol = Nodo(15)
valores = [18, 7, 3, 4, 19, 2, 16, 0, 12, 11, 31, 17, 22]
for valor in valores:
arbol = agregar_nodo(arbol, valor)

# Crear un gráfico de red


G = [Link]()
pos = {}

# Agregar nodos y bordes al gráfico


agregar_nodos_grafo(arbol, G, pos, 0, 0)

# Dibujar el gráfico
[Link](G, pos, with_labels=True, node_size=2000, node_color="lightblue", font_size=20,
font_weight="bold")
[Link]("Árbol Binario")
[Link]()
Código para agregar un nuevo nodo al árbol:
#agregar nuevo nodo
new_nodo=int(input("Ingregar nuevo nodo: "))
[Link](new_nodo)
for valor in valores:
arbol = agregar_nodo(arbol, valor)

# Crear un gráfico de red


G = [Link]()
pos = {}

# Agregar nodos y bordes al gráfico


agregar_nodos_grafo(arbol, G, pos, 0, 0)

# gráfico con el nuevo nodo agregado


[Link](G, pos, with_labels=True, node_size=2000,
node_color="lightblue", font_size=20, font_weight="bold")
[Link]("Árbol Binario")
[Link]()

Código para eliminar cualquier nodo ingresado por el usuario:


def eliminar_nodo(nodo, valor):
if nodo is None:
return None
if valor < [Link]:
[Link] = eliminar_nodo([Link], valor)
elif valor > [Link]:
[Link] = eliminar_nodo([Link], valor)
else:
if [Link] is None:
return [Link]
elif [Link] is None:
return [Link]
else:
sucesor = encontrar_minimo([Link])
[Link] = [Link]
[Link] = eliminar_nodo([Link],
[Link])
return nodo

def encontrar_minimo(nodo):
while [Link]:
nodo = [Link]
return nodo
# Supongamos que tenemos un árbol binario llamado arbol y queremos
eliminar un nodo con el valor valor_a_eliminar
valor_a_eliminar = int(input("Ingrese nodo a eliminar: ")) # Por
ejemplo, queremos eliminar el nodo con valor 5

# Llamar a la función para eliminar el nodo


arbol = eliminar_nodo(arbol, valor_a_eliminar)
agregar_nodos_grafo(arbol, G, pos, 0, 0)

# Volver a dibujar el gráfico del árbol binario actualizado


G = [Link]()
pos = {}
agregar_nodos_grafo(arbol, G, pos, 0, 0)
[Link](G, pos, with_labels=True, node_size=2000,
node_color="lightblue", font_size=20, font_weight="bold")
[Link]("Árbol Binario Actualizado")
[Link]()

Link de los ejercicios resueltos GOOGLE COLABORATORY

[Link]

También podría gustarte