Proyecto 2: Aplicación de Libro de Contactos
Agregando Funcionalidad de Eliminación
Otra funcionalidad esencial es la capacidad de eliminar un contacto. Eliminar un nodo de un BST requiere una consideración cuidadosa, especialmente si el nodo tiene dos hijos.
Eliminando un Nodo de un BST:
Así es como podemos agregar la funcionalidad de eliminación:
class ContactBookBST:
# ... previous methods ...
def delete_contact_util(self, root, name):
if root is None:
return root
if name < root.name:
root.left = self.delete_contact_util(root.left, name)
elif name > root.name:
root.right = self.delete_contact_util(root.right, name)
else:
if root.left is None:
return root.right
elif root.right is None:
return root.left
temp_val = self.min_value_node(root.right)
root.name = temp_val.name
root.right = self.delete_contact_util(root.right, temp_val.name)
return root
def min_value_node(self, node):
current = node
while current.left is not None:
current = current.left
return current
def delete_contact(self, name):
self.root = self.delete_contact_util(self.root, name)
# Example Usage
contact_book.delete_contact("Bob")
Este método maneja diferentes escenarios como la eliminación de un nodo sin hijos, con un hijo o con dos hijos.
Agregando Funcionalidad de Eliminación
Otra funcionalidad esencial es la capacidad de eliminar un contacto. Eliminar un nodo de un BST requiere una consideración cuidadosa, especialmente si el nodo tiene dos hijos.
Eliminando un Nodo de un BST:
Así es como podemos agregar la funcionalidad de eliminación:
class ContactBookBST:
# ... previous methods ...
def delete_contact_util(self, root, name):
if root is None:
return root
if name < root.name:
root.left = self.delete_contact_util(root.left, name)
elif name > root.name:
root.right = self.delete_contact_util(root.right, name)
else:
if root.left is None:
return root.right
elif root.right is None:
return root.left
temp_val = self.min_value_node(root.right)
root.name = temp_val.name
root.right = self.delete_contact_util(root.right, temp_val.name)
return root
def min_value_node(self, node):
current = node
while current.left is not None:
current = current.left
return current
def delete_contact(self, name):
self.root = self.delete_contact_util(self.root, name)
# Example Usage
contact_book.delete_contact("Bob")
Este método maneja diferentes escenarios como la eliminación de un nodo sin hijos, con un hijo o con dos hijos.
Agregando Funcionalidad de Eliminación
Otra funcionalidad esencial es la capacidad de eliminar un contacto. Eliminar un nodo de un BST requiere una consideración cuidadosa, especialmente si el nodo tiene dos hijos.
Eliminando un Nodo de un BST:
Así es como podemos agregar la funcionalidad de eliminación:
class ContactBookBST:
# ... previous methods ...
def delete_contact_util(self, root, name):
if root is None:
return root
if name < root.name:
root.left = self.delete_contact_util(root.left, name)
elif name > root.name:
root.right = self.delete_contact_util(root.right, name)
else:
if root.left is None:
return root.right
elif root.right is None:
return root.left
temp_val = self.min_value_node(root.right)
root.name = temp_val.name
root.right = self.delete_contact_util(root.right, temp_val.name)
return root
def min_value_node(self, node):
current = node
while current.left is not None:
current = current.left
return current
def delete_contact(self, name):
self.root = self.delete_contact_util(self.root, name)
# Example Usage
contact_book.delete_contact("Bob")
Este método maneja diferentes escenarios como la eliminación de un nodo sin hijos, con un hijo o con dos hijos.
Agregando Funcionalidad de Eliminación
Otra funcionalidad esencial es la capacidad de eliminar un contacto. Eliminar un nodo de un BST requiere una consideración cuidadosa, especialmente si el nodo tiene dos hijos.
Eliminando un Nodo de un BST:
Así es como podemos agregar la funcionalidad de eliminación:
class ContactBookBST:
# ... previous methods ...
def delete_contact_util(self, root, name):
if root is None:
return root
if name < root.name:
root.left = self.delete_contact_util(root.left, name)
elif name > root.name:
root.right = self.delete_contact_util(root.right, name)
else:
if root.left is None:
return root.right
elif root.right is None:
return root.left
temp_val = self.min_value_node(root.right)
root.name = temp_val.name
root.right = self.delete_contact_util(root.right, temp_val.name)
return root
def min_value_node(self, node):
current = node
while current.left is not None:
current = current.left
return current
def delete_contact(self, name):
self.root = self.delete_contact_util(self.root, name)
# Example Usage
contact_book.delete_contact("Bob")
Este método maneja diferentes escenarios como la eliminación de un nodo sin hijos, con un hijo o con dos hijos.