Arboles Procesamiento de Datos
Arboles Procesamiento de Datos
Arboles Procesamiento de Datos
Arboles
Guillermo Yunes
30271612
Procesamiento de Datos
07/02/2024
Definición instructiva y formal de la estructura de árbol.
Son las estructuras de datos más utilizadas, pero también una de las más
complejas, Los Árboles se caracterizan por almacenar sus nodos en forma
jerárquica y no en forma lineal
Esta estructura se caracteriza por que cada nodo solo puede tener máximo 2
hijo, dicho de otra manera, es un Árbol n-ario de Grado 2
1
/\
2 3
/\
4 5
Cada nodo tiene como máximo dos hijos: uno a la izquierda y otro a la derecha.
Cada nodo puede tener cero, uno o dos hijos, lo que lo convierte en un árbol
binario.
Operaciones
Las búsquedas no informadas son aquellas en que se realiza el viaje por todo el
árbol sin tener una pista de donde pueda estar el dato deseado. Este tipo de
búsquedas también se conocen como búsquedas a ciegas.
Ordenamiento.
class Node:
def __init__(self, key):
self.left = None
self.right = None
.val = key
def inorder_traversal(root):
if root:
inorder_traversal(root.left)
print(root.val)
inorder_traversal(root.right)
root = None
keys = [10, 5, 15, 3, 7, 12, 18]
En este algoritmo, creamos una clase Node para representar los nodos del
árbol. Luego definimos una función insert para insertar un nuevo nodo en el
árbol de manera ordenada. Finalmente, utilizamos la función inorder_traversal
para imprimir los valores de los nodos en orden ascendente.
class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key
def preorder_traversal(root):
if root:
print(root.val)
preorder_traversal(root.left)
preorder_traversal(root.right)
def inorder_traversal(root):
if root:
inorder_traversal(root.left)
print(root.val)
inorder_traversal(root.right)
def postorder_traversal(root):
if root:
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.val)
root = None
keys = [10, 5, 15, 3, 7, 12, 18]
print("Preorder traversal:")
preorder_traversal(root)
print("\nInorder traversal:")
inorder_traversal(root)
print("\nPostorder traversal:")
postorder_traversal(root)
python
class Node:
__init__(self, key):
self.left = None
self.right = None
self.val key
def minValue(node):
current node
while current.left is not None:
current = current.left
return current
temp = minValueNode(root.right)
root.val = temp.val
root.right = deleteNode(root.right, temp.val)
return root
# Ejemplo de uso
root = Node(10)
root.left = Node(5)
root = Node(20)
root.left.left = Node(3)
root.left.right = Node(7)
print("Árbol original:")
# Recorrer el árbol en orden para imprimir los valores
def inorderTraversal(node):
if node:
inorderTraversal(node.left)
print(node, end=" ")
inorderTraversal(node.right)
inorderTraversal(root)
print("\n")
root = deleteNode(root, 5)
Este algoritmo de eliminación en un árbol bin elimina un nodo con el valor dado
manteniendo la propiedad de orden del árbol.
python
class Node:
def __init__(self, key):
self.left = None
if root is None:
return Node(key)
else:
if root.val < key:
root.rightpython
class Node:
def _init_(self, key):
self = insert(root.right, key)
else:
root.left = None
self.right = None
self.val =.left = insert(root.left, key)
return root
# Ejemplo de key
# Ejemplo de uso
root = los nodos del árbol y una función `insert` para insertar Node(10)
insert(root, 5)
insert(root, un nuevo nodo con un valor dado en el árbol binario15)
insert(root, 3)
insert(root, 7)
class Nodo:
def __init__(self, valor):
self.valor = valor
self.izquierda = None
self.derecha None
def insertar(raiz, nodo):
ifiz is None:
raiz = nodo
else:
if raiz.valor < nodo.valor:
if raiz.derecha is None:
raiz.derecha = nodo
else:
insertar(raiz.derecha, nodo)
else:
if raiz.izquierda is None:
raiz.izquierda = nodo
else:
insertar(raiz.izquierda, nodo)
if nodo_encontrado:
print(f"Elemento {elemento_buscado} encontrado en el árbol.")
else:
print(f"Elemento {elemento_buscado} no encontrado en el árbol.")
class Nodo:
def __init__(self, valor):
self.valor = valor
self.izquierda = None
self.derecha = None
def inorder(raiz):
if raiz:
inorder(raiz.izquierda)
print(raiz.valor)
inorder(raiz.derecha)