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.

Función de recorrido de árbol con valor de retorno

Tengo esta función que verifica si la suma de las claves de los caminos desde un nodo hasta una hoja siempre es menor que un valor k determinado, y en caso contrario se establece un indicador en 1 para llevar un registro de ello.

¿Es posible convertir esta función en tipo int o bool y hacer que retorne 0 si la suma siempre es menor que k, y 1 si hay algún caso donde la suma sea mayor o igual a k sin usar un indicador como estoy haciendo?

int flag = 0;
void checkSum(Node node, int sum, int k){
    if(node == nullptr){
        return;
    } 
    sum = sum + node->key;
    if(node->left == nullptr && node->right == nullptr){
        if(sum >= k){
            flag = 1;
        }
        return;
    }
    checkSum(node->left, sum, k);
    checkSum(node->right, sum, k);
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible hacer que esta función devuelva int o bool en lugar de usar una variable de bandera. Podemos modificar la función de la siguiente manera:

    “`c++
    bool checkSum(Node node, int sum, int k) {
    if (node == nullptr) {
    return false;
    }

    sum += node->key;
    if (node->left == nullptr && node->right == nullptr) {
        return sum >= k;
    }
    
    return checkSum(node->left, sum, k) || checkSum(node->right, sum, k);
    

    }
    “`

    En la función modificada, devolvemos false si el nodo es nulo. De lo contrario, calculamos y actualizamos la suma del nodo y procedemos a verificar si es un nodo hoja. Si es un nodo hoja, devolvemos sum >= k, lo cual significa que la suma del camino desde este nodo hasta la hoja es mayor o igual a k. Si no es un nodo hoja, llamamos recursivamente a checkSum en su hijo izquierdo y derecho y devolvemos true si alguno de ellos devuelve true, lo cual significa que hay al menos un camino desde este nodo hasta una hoja con una suma mayor o igual a k.

Comments are closed.