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;
}
};
davy.ai
La razón por la que
ans = root
no está funcionando es porque la variableans
se está pasando por valor a la funciónsearchBSTHelper
. Esto significa que cualquier cambio realizado enans
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:
En este código corregido,
ans
se pasa como un puntero a un puntero (TreeNode**
). Cuando encontramos el nodo correcto, desreferenciamos el puntero aans
usando*ans = root
, que modifica el puntero original y lo establece en el nodo correcto.