Escribir una función para calcular la altura de un árbol cualquiera
Para solucionarlo crearemos la función altura(Nodo nod,Arbol T) que obtiene la altura del nodo nod mediante el cálculo del máximo sobre las alturas de sus hijos(obtenidas mediante llamadas recursivas).La llamada a la función sobre un árbol al que queremos obtener su altura es altura(Raiz(T),T).
int altura(Nodo nod,Arbol T) { Nodo n; int maximo,aux; if(nod==NODO_NULO) return -1; for(maximo=-1,n=HijoIzqda(nod,T);n!=NODO_NULO;n=HermanoDrcha(n,T)){ aux=altura(n,T); if(aux > maximo) maximo=aux; } return maximo+1;
Escribir una función no recursiva para calcular la altura de un árbol cualquiera
Haremos un recorrido en preorden por el árbol y cada nodo visitado implicará un incremento de uno en la variable que al final contendrá el número total de nodos del árbol.De esta manera,podemos usar el mismo algoritmo no recursivo que para listar un árbol ,pero sustituyendo la escritura por el incremento de la variable.La función es la siguiente:
int NumeroNodosArbol(tArbol T) { int res; Pila P; Nodo m; res=0; P=CrearPila(sizeof(nodo)); m=Raiz(T); do{ if(m!=NODO_NULO){ res++; Push(&m,P); m=HijoIzqda(m,T); } else if(!VaciaPila(P)){ Tope(&m,P); Pop(P); m=HermanoDrcha(m,T); } }while (!VaciaPila(P)); DestruirPila(P); return res;
Responder a las siguientes preguntas sobre el árbol siguiente:
¿Qué nodo es la raíz?
¿Cuántos caminos diferentes de longitud tres hay?
¿Es un camino la sucesión de nodos HGFBACI?
¿Qué nodos son los ancestros de K?
¿Qué nodos son los ancestros propios de N?
¿Qué nodos son los descendientes propios de M?
¿Qué nodos son las hojas?
¿Cuál es la altura del nodo C?
¿Cuál es la altura del árbol?
¿Cuál es la profundidad del nodo C?
¿Cuál es el hermano a la derecha de D?
¿Es I hermano a la derecha de F?
¿Está F a la izquierda de J?
¿Está L a la derecha de J?
¿Qué nodos están a la izquierda y a la derecha de J?
¿Cuántos hijos tiene A?
Listar los nodos del árbol en preorden,postorden e inorden.
Considerando la función de listado en preorden de un árbol general que se ha presentado en la página web referente a árboles generales,escribir dos funciones de escritura y lectura de un árbol con etiquetas de tipo entero usando la misma estructura recursiva.Supóngase que se dispone de dos funciones de escritura y lectura (Escribir y Leer respectivamente)así como de una variable FINAL tal como se indicó en teoría de árboles generales