SEGUNDO PARCIAL
Parte 1

Solución 1:
Identificación y representación grafica:
Listas ligadas
Seudocódigo
clase ArbolGeneral:
raiz = null
función __init__(self, raiz):
self.raiz = raiz
función agregar_nodo(self, valor, padre):
nuevo_nodo = NodoArbolGeneral(valor)
si padre es null entonces
self.raiz = nuevo_nodo
sino
padre.hijos.agregar(nuevo_nodo)
función buscar_nodo(self, valor):
nodos_por_visitar = [self.raiz]
mientras nodos_por_visitar no esté vacío hacer
nodo_actual = nodos_por_visitar.quitar(0)
si nodo_actual.valor es igual a valor entonces
retornar nodo_actual
nodos_por_visitar.extend(nodo_actual.hijos)
retornar null
función imprimir_arbol(nodo, nivel):
si nodo no es null entonces
imprimir " " * nivel + nodo.valor
para cada hijo en nodo.hijos hacer
imprimir_arbol(hijo, nivel + 2)
Listas Generalizadas
Seudocódigo
clase Nodo:
valor = null
hijos = []
función __init__(self, valor):
self.valor = valor
self.hijos = []
función agregar_hijo(self, hijo):
self.hijos.agregar(hijo)
función __str__(self):
retornar a cadena(self.valor)
clase ArbolGeneralizado:
raiz = null
función __init__(self, raiz):
self.raiz = raiz
función agregar_nodo(self, valor, hijos, padre):
nuevo_nodo = Nodo(valor)
si padre es null entonces
self.raiz = nuevo_nodo
sino
padre.agregar_hijo(nuevo_nodo)
si hijos no es null entonces
para cada hijo en hijos hacer
nuevo_nodo.agregar_hijo(hijo)
función buscar_nodo(self, valor):
nodos_por_visitar = [self.raiz]
mientras nodos_por_visitar no esté vacío hacer
nodo_actual = nodos_por_visitar.quitar(0)
si nodo_actual.valor es igual a valor entonces
retornar nodo_actual
nodos_por_visitar.extend(nodo_actual.hijos)
retornar null
función imprimir_arbol(nodo, nivel):
si nodo no es null entonces
imprimir " " * nivel + a cadena(nodo)
para cada hijo en nodo.hijos hacer
imprimir_arbol(hijo, nivel + 2)
Parte 2

Solución 2 COMPLETA
