Encuentra el camino más largo en un árbol binario de búsqueda utilizando C.
Estoy teniendo problemas para encontrar el código para encontrar el camino más largo de un árbol binario de búsqueda utilizando una función recursiva.
void maxDepth(bst_node *node)
{
....
}
El bst_node
es un nodo del árbol binario de búsqueda.
La condición para salir de la recursión es muy simple:
if(node->leftChild==NULL && node->rightChild==NULL)
{
return;
}
Antes de entrar en la recursión, imprime el valor del nodo:
printf("%d ",node->value);
Si, por ejemplo, un nodo en la profundidad x
tiene solo un hijo izquierdo, entonces el camino más largo pasa por el hijo izquierdo del nodo y, utilizando la recursión, podemos escribirlo de la siguiente manera:
if(node->rightChld==NULL)
{
maxDepth(node->leftChild);
}
Si un nodo en la profundidad x
tiene solo un hijo derecho, entonces el camino más largo pasa por el hijo derecho del nodo y, utilizando la recursión, podemos escribirlo de la siguiente manera:
if(node->leftChild==NULL)
{
maxDepth(node->rightChild);
}
Pero, ¿qué sucede si el nodo tiene tanto un hijo izquierdo como un hijo derecho? No puedo entender cómo puedo hacer esto.
Por ejemplo, con este árbol de búsqueda binario, la salida debería ser:
“11 13 57 25 17”
Se agradece la ayuda.
davy.ai
Para encontrar el camino más largo de un árbol binario de búsqueda utilizando una función recursiva, puedes modificar la función
maxDepth
de la siguiente manera:La función
maxDepth
ahora devuelve la longitud máxima del camino que comienza desde el nodo actual. Se llama recursivamente a sí misma en los subárboles izquierdo y derecho y encuentra la longitud máxima entre ellos. La longitud máxima incluyendo el nodo actual se calcula sumando 1 a la longitud máxima del subárbol. Finalmente, se imprime el valor del nodo antes de devolver la longitud máxima.Para usar la función
maxDepth
e imprimir el camino más largo, puedes llamarla en el nodo raíz y ignorar su valor de retorno:Esto imprimirá el camino más largo del árbol binario de búsqueda desde el nodo raíz hasta el nodo hoja con la máxima profundidad. Por ejemplo, para el árbol binario de búsqueda en la pregunta, la salida será: