diff --git a/arbol_binario.py b/arbol_binario.py index 2722955..721e48d 100644 --- a/arbol_binario.py +++ b/arbol_binario.py @@ -1,68 +1,28 @@ -class Nodo: - def __init__(self, valor): - self.valor = valor - self.izquierda = None - self.derecha = None - -class ArbolBinarioBusqueda: - def __init__(self): - self.raiz = None - - def insertar(self, valor): - if self.raiz is None: - self.raiz = Nodo(valor) - else: - self._insertar_recursivo(self.raiz, valor) - - def _insertar_recursivo(self, nodo, valor): - if valor < nodo.valor: - if nodo.izquierda is None: - nodo.izquierda = Nodo(valor) - else: - self._insertar_recursivo(nodo.izquierda, valor) - elif valor > nodo.valor: - if nodo.derecha is None: - nodo.derecha = Nodo(valor) - else: - self._insertar_recursivo(nodo.derecha, valor) - - def buscar(self, valor): - return self._buscar_recursivo(self.raiz, valor) - - def _buscar_recursivo(self, nodo, valor): - if nodo is None or nodo.valor == valor: - return nodo is not None - if valor < nodo.valor: - return self._buscar_recursivo(nodo.izquierda, valor) - else: - return self._buscar_recursivo(nodo.derecha, valor) - - def _imprimir_recursivo(self, nodo, espacio): - if nodo is not None: - espacio += 5 - self._imprimir_recursivo(nodo.derecha, espacio) - print() - for _ in range(5, espacio): - print(end=" ") - print(nodo.valor) - self._imprimir_recursivo(nodo.izquierda, espacio) - - def imprimir(self): - self._imprimir_recursivo(self.raiz, 0) - -# Ejemplo de uso -arbol = ArbolBinarioBusqueda() -arbol.insertar(10) -arbol.insertar(5) -arbol.insertar(15) -arbol.insertar(7) -arbol.insertar(3) -arbol.insertar(12) -arbol.insertar(14) -arbol.insertar(20) -arbol.insertar(18) -arbol.insertar(16) - -# Mostrar el árbol binario -print("Árbol binario:") -arbol.imprimir() +class Nodo: + """Representa un nodo en un árbol binario.""" + def __init__(self, valor): + """Inicializa un nodo con el valor dado.""" + self.valor = valor + self.izquierda = None + self.derecha = None + +class ArbolBinario: + """Representa un árbol binario.""" + def __init__(self): + """Inicializa un árbol binario vacío.""" + self.raiz = None + + def insertar(self, valor): + """Inserta un nuevo valor en el árbol.""" + if self.raiz is None: + self.raiz = Nodo(valor) + else: + self._insertar_recursivo(valor, self.raiz) + + def buscar(self, valor): + """Busca un valor en el árbol.""" + return self._buscar_recursivo(valor, self.raiz) + + def imprimir_inorden(self): + """Imprime los valores del árbol en orden (inorden).""" + self._imprimir_inorden_recursivo(self.raiz) diff --git a/lista_enlazada.py b/lista_enlazada.py new file mode 100644 index 0000000..1d3b7d7 --- /dev/null +++ b/lista_enlazada.py @@ -0,0 +1,51 @@ +import numpy as np +import matplotlib.pyplot as plt + +class LinkedList: + def __init__(self): + self.head = None + + def append(self, value): + if self.head is None: + self.head = np.array([value, -1]) # El segundo elemento es el índice del siguiente nodo (-1 si no hay más nodos) + else: + current = self.head + while current[1] != -1: + current_index = int(current[1]) + current = self.array[current_index] + new_node_index = len(self.array) + new_node = np.array([value, -1]) + current[1] = new_node_index + + def display(self): + current = self.head + while current is not None: + print(current[0], end=" -> ") + current_index = int(current[1]) + current = self.array[current_index] + +# Crear una lista enlazada +linked_list = LinkedList() +linked_list.append(1) +linked_list.append(2) +linked_list.append(3) +linked_list.append(4) + +# Mostrar la lista enlazada +linked_list.display() + +# Visualizar la lista enlazada utilizando matplotlib +values = [] +current = linked_list.head +while current is not None: + values.append(current[0]) + current_index = int(current[1]) + current = linked_list.array[current_index] + +plt.figure(figsize=(8, 6)) +plt.title("Linked List") +plt.plot(values, marker='o', linestyle='-') +plt.xlabel("Index") +plt.ylabel("Value") +plt.grid(True) +plt.show() diff --git a/subarreglo_max.py b/subarreglo_max.py new file mode 100644 index 0000000..521357c --- /dev/null +++ b/subarreglo_max.py @@ -0,0 +1,26 @@ +def max_subarray_sum(arr): + max_sum = arr[0] + current_sum = arr[0] + start_index = 0 + end_index = 0 + temp_start_index = 0 + + for i in range(1, len(arr)): + if arr[i] > current_sum + arr[i]: + current_sum = arr[i] + temp_start_index = i + else: + current_sum += arr[i] + + if current_sum > max_sum: + max_sum = current_sum + start_index = temp_start_index + end_index = i + + return max_sum, arr[start_index:end_index+1] + +#funcionalidad +arr = [-2, 1, -3, 4, -1, 2, 1, -5, 4] +max_sum, max_subarray = max_subarray_sum(arr) +print("La suma máxima del subarray contiguo es:", max_sum) +print("El subarray correspondiente es:", max_subarray) \ No newline at end of file