es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo recorrer correctamente un árbol con un nodo “actual” o “temporal” para asignar?

Tengo un árbol binario en el que el nodo raíz solo tiene un hijo izquierdo. Estoy creando métodos para insertar, eliminar y buscar en el árbol. Mi estrategia es hacer un nodo temporal llamado “current” y asignarle el valor de mi raíz al inicio de cada método. Con este nodo “current”, recorro mi árbol buscando el lugar correcto para insertar o eliminar nodos. Mi línea de current = newNode es lo que pensé que insertaría mi nuevo nodo en el árbol.

Cuando pruebo para ver si funciona, intento imprimir root.leftChild.leftChild.name para ver si se insertó, pero aparece nulo.

public void insertDate(String flight, String date) {
    current = root.leftChild;
    Node newNode = new Node(date);

    while (current != null) {
        if (current.name == flight) {
            current = current.leftChild;
            while (current != null) {
                current = current.rightChild;
            }
            current = newNode;
            return;
        }
        current = current.rightChild;
    }
}

Dibujo del árbol

Este código funciona aquí:

public void addFlight(String flight) {
    current = root;
    Node newNode = new Node(flight);

    if (current.leftChild == null) {
        current.leftChild = newNode;
        System.out.println(flight + " ha sido agregado!");
    } else {
        current = current.leftChild;
        while (current.rightChild != null) {
            current = current.rightChild;
        }
        current.rightChild = newNode;
        System.out.println(flight + " ha sido agregado!");
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que podría haber un error en el método insertDate(). Un problema podría ser con la línea if (current.name == flight) ya que está comparando referencias de String usando == en lugar de .equals(). Otro posible problema podría ser que el bucle while (current != null) no esté encontrando correctamente el lugar correcto para insertar el nuevo nodo.

    Para solucionar este problema, se podría intentar actualizar el método insertDate() de la siguiente manera:

    public void insertDate(String flight, String date) {
        current = root.leftChild;
        Node newNode = new Node(date);
    
        while (current != null) {
            if (current.name.equals(flight)) {
                if (current.leftChild == null) {
                    current.leftChild = newNode;
                    return;
                } else {
                    current = current.leftChild;
                    while (current.rightChild != null) {
                        current = current.rightChild;
                    }
                    current.rightChild = newNode;
                    return;
                }
            }
            current = current.rightChild;
        }
    }
    

    Este código verifica si el nodo actual tiene el nombre de vuelo correcto y maneja casos en los que el nodo actual ya tiene o no tiene un leftChild. Debería insertar correctamente el newNode en la ubicación correcta en el árbol binario. Además, utiliza .equals() para comparar Strings en lugar de ==.

Comments are closed.