Menu iconMenu icon
Algoritmos y Estructuras de Datos con Python

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.