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.

Buscar en un Árbol de Búsqueda Binaria (Leetcode)

Se te da la raíz de un árbol binario de búsqueda (BST) y un entero val.

Encuentra el nodo en el BST cuyo valor es igual a val y devuelve el subárbol con esa raíz. Si no existe dicho nodo, devuelve null.

¿Por qué ‘ans = root’ no está funcionando??

class Solution {
public:
void searchBSTHelper(TreeNode* root, int val, TreeNode* ans){
// Caso base
if(root == NULL){
ans = ans;
return;
}
if(val > root->val){
searchBSTHelper(root->right,val,ans);
}
else if(val < root->val){
searchBSTHelper(root->left,val,ans);
}
else if(val == root->val){
ans = root;
cout<<ans->val<<" "<<ans->left->val<<" ";
return;
}
}
TreeNode* searchBST(TreeNode* root, int val) {
TreeNode * ans = NULL;
searchBSTHelper(root,val,ans);
//cout<<ans->val<<" ";
return ans;
}
};

Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la que ans = root no está funcionando es porque la variable ans se está pasando por valor a la función searchBSTHelper. Esto significa que cualquier cambio realizado en ans dentro de la función no se reflejará fuera de la función.

    Para solucionar este problema, debemos pasar ans por referencia o por puntero. En este caso, se está pasando por puntero, pero el puntero mismo debe ser modificado para apuntar al nodo correcto.

    El código corregido se muestra a continuación:

    class Solution {
    public:
        void searchBSTHelper(TreeNode* root, int val, TreeNode** ans){
            //Caso base
            if(root == NULL){
                return;
            }
    
            if(val > root->val){
                searchBSTHelper(root->right,val,ans);
            }
            else if(val < root->val){
                 searchBSTHelper(root->left,val,ans);
            }
            else if(val == root->val){
                *ans = root;
                return;
            }
        }
        TreeNode* searchBST(TreeNode* root, int val) {
            TreeNode * ans = NULL;
            searchBSTHelper(root,val,&ans);
            return ans;
        }
    };
    

    En este código corregido, ans se pasa como un puntero a un puntero (TreeNode**). Cuando encontramos el nodo correcto, desreferenciamos el puntero a ans usando *ans = root, que modifica el puntero original y lo establece en el nodo correcto.

Comments are closed.