Dado un árbol binario, encuentra la altura del mismo. La altura del árbol vacío es 0 y la altura del árbol inferior es 3.
Árbol de ejemplo
- ¿Es posible implementar un montón dinámico paralelo?
- Cómo convertir 8.426661309628124e + 22 a 84266613096281243382112 en Javascript
- ¿Cuál es la diferencia entre la clasificación rápida y el algoritmo de clasificación de burbujas?
- ¿Cuáles son algunos algoritmos de gráficos más utilizados en aplicaciones del mundo real?
- Cómo encontrar el salto más pequeño
Le recomendamos encarecidamente que haga clic aquí y lo practique antes de pasar a la solución.
Calcule recursivamente la altura de los subárboles izquierdo y derecho de un nodo y asigne la altura al nodo como máximo de las alturas de dos hijos más 1. Vea el pseudocódigo y el programa a continuación para obtener más detalles.
Algoritmo:
maxDepth () 1. Si el árbol está vacío, devuelve 0 2. De lo contrario (a) Obtenga la profundidad máxima del subárbol izquierdo recursivamente, es decir, llame a maxDepth (árbol-> subárbol izquierdo) (a) Obtenga la profundidad máxima del subárbol derecho recursivamente, es decir , llame a maxDepth (árbol-> subárbol derecho) (c) Obtenga el máximo de profundidades máximas de los subárboles izquierdo y derecho y agregue 1 para el nodo actual. max_depth = max (departamento máximo del subárbol izquierdo, profundidad máxima del subárbol derecho) + 1 (d) Devuelve max_depth
Consulte el diagrama a continuación para obtener más claridad sobre la ejecución de la función recursiva maxDepth () para el árbol de ejemplos anterior.
maxDepth (‘1’) = max (maxDepth (‘2’), maxDepth (‘3’)) + 1 = 2 + 1 / \ / \ / \ / \ / \ maxDepth (‘1’) maxDepth (‘3’ ) = 1 = max (maxDepth (‘4’), maxDepth (‘5’)) + 1 = 1 + 1 = 2 / \ / \ / \ / \ / \ maxDepth (‘4’) = 1 maxDepth (‘5 ‘) = 1
Implementación:
C
#include
#include
/ * Un nodo de árbol binario tiene datos, puntero al hijo izquierdo
y un puntero al niño derecho * /
nodo de estructura
{
datos int;
struct node * left;
struct node * right;
};
/ * Calcular el “maxDepth” de un árbol – el número de
nodos a lo largo de la ruta más larga desde el nodo raíz
hasta el nodo de hoja más lejano. * /
int maxDepth (nodo de estructura * nodo)
{
if (nodo == NULL)
devuelve 0;
más
{
/ * calcular la profundidad de cada subárbol * /
int lDepth = maxDepth (nodo-> izquierda);
int rDepth = maxDepth (nodo-> derecha);
/ * usa el más grande * /
if (lDepth> rDepth)
retorno (lDepth + 1);
más return (rDepth + 1);
}
}
/ * Función auxiliar que asigna un nuevo nodo con el
datos dados y punteros NULL izquierdo y derecho. * /
struct node * newNode (int data)
{
struct node * node = (struct node *)
malloc (sizeof
nodo-> datos = datos;
nodo-> izquierda = NULL;
nodo-> derecho = NULL;
retorno (nodo);
}
int main ()
{
struct node * root = newNode (1);
root-> left = newNode (2);
root-> right = newNode (3);
root-> left-> left = newNode (4);
root-> left-> right = newNode (5);
printf (“Altura del árbol es% d”, maxDepth (root));
getchar ();
devuelve 0;
}