¿Cómo encontramos la altura de un árbol binario? ¿Cómo se relaciona con el nivel?

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

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;

}

La altura del árbol binario es el nodo de hoja más profundo desde la raíz del árbol binario, el nivel no es más que cuántos bordes hay entre el nodo raíz y el nodo en el que va a encontrar el nivel.

La relación entre la altura y el nivel es el nivel más alto del árbol que se llama altura del árbol.