Ejercicios Resueltos Árboles - Estructuras de Datos
Ejercicios Resueltos Árboles - Estructuras de Datos
Ejercicios Resueltos Árboles - Estructuras de Datos
Solución:
1. Lg copiaLg()
2. Lg c = new Lg()
3. c.primero = copia(primerNodo())
4. return c
5. Fin(copiaLg)
1. nodoLg copia(nodoLg p)
2. nodoLg x
3. x = null
4. if (p != null) then
5. x = new nodoLg(null)
6. if (p.retornaSw() == 1) then
7. x.asignaSw(1)
8. x.asignaDato(copia((nodoLg)p.retornaDato()))
9. else
10. x.asignaDato(p.retornaDato())
11. end(if)
12. x.asignaLiga(copia(p.retornaLiga()))
13. end(if)
14. return x
15. Fin(copia)
Solución:
Solución:
1. float evaluaPolinomio(nodoPoli x)
2. float res, vv
3. nodoPoliMuchasVariables p
4. res = 0
5. vv = x.retornaCoef().retornaValor()
6. p = x.retornaLiga()
7. while (p != null) do
8. if (p.retornaSw() == 0) then
9. res = res + p.retornaCoef()*vv^p.retornaExpo()
10. else
11. res = res +
evaluaPolinomio(p.retornaCoef())*vv^p.retornaExpo()
12. end(if)
13. p = p.retornaLiga()
14. end(while)
15. return res
16. Fin(evaluaPolinomio)
Solución:
1. void consLgRec(String s)
2. nn = s.length()
3. j=1
4. primero = construyeLgRecursivo(s)
5. asignaUltimo()
6. Fin(consLgRec)
1. nodoLg construyeLgRecursivo(String s)
2. if (j <= nn) then
3. nodoLg x = new nodoLg(null)
4. if (s.charAt(j) == '(') then
5. x.asignaSw(1)
6. j=j+1
7. x.asignaDato(construyeLgRecursivo(s))
8. else
9. x.asignaDato(s.charAt(j))
10. j=j+1
11. end(if)
12. if (s.charAt(j) == ',') then
13. j=j+1
14. x.asignaLiga(construyeLgRecursivo(s))
15. else
16. j=j+1
17. end(if)
18. return x
19. end(if)
20. return null
21. Fin(construyeLgRecursivo)
5. Elabore un algoritmo que imprima una lista generalizada como una hilera de átomos,
paréntesis izquierdos y paréntesis derechos dada la representación como lista ligada.
Solución:
1. void escribeLg(nodoLg p)
2. write('(')
3. while !finDeRecorrido(p) do
4. if (p.retornaSw() == 0) then
5. write(p.retornaDato())
6. else
7. escribeLg(p.retornaDato())
8. end(if)
9. if (p.retornaLiga() != null) then
10. write(',')
11. end(if)
12. p = p.retornaLiga()
13. end(while)
14. write(')')
15. Fin(escribeLg)
6. Elabore un algoritmo que reverse una lista generalizada y todas sus sublistas.
Solución:
1. nodoLg reversaLista(nodoLg t)
2. nodoLg p, q, r, s
3. p=t
4. q = null
5. while !finDeRecorrido(p) do
6. r=q
7. q=p
8. p = p.retornaLiga()
9. q.asignaLiga(r)
10. if (q.retornaSw() == 1) then
11. s = q.retornaDato()
12. q.asignaDato(reversaLista(s))
13. end(if)
14. end(while)
15. primero = q
16. return primero
17. Fin(reversaLista
SOLUCIONES MODULO 10
Solución:
1. void construyeArbol(String s)
2. int n, i
3. nodoLg primero, ultimo, x
4. stack pila
5. primero = new nodoLg(null)
6. ultimo = primero
7. primero.asignaDato(s[2])
8. n = s.longitud()
9. if (n == 3) then
10. return
11. end(if)
12. i=4
13. while (i <= n – 2) do
14. x = new nodoLg(null)
15. ultimo.asignaLiga(x)
16. ultimo = x
17. if (s[i+1] == '(') then
18. ultimo.asignaSw(1)
19. pila.apilar(ultimo)
20. x = new nodoLg(s[i])
21. ultimo.asignaDato(x)
22. ultimo = x
23. i=i+2
24. else
25. ultimo.asignaDato(s[i])
26. if (s[i+1] == “)”) then
27. i=i+1
28. while (i < n and s[i] ==”)” and !pila.esVacia()) do
29. ultimo = pila.desapilar()
30. i=i+1
31. end(while)
32. if (s[i] == “,”) then
33. i=i+1
34. end(if)
35. else
36. i=i+2
37. end(if)
38. end(if)
39. end(while)
40. Fin(construyeArbol)
2. Elabore algoritmo que determine y retorne el grado de un dato entrado como parámetro
en un árbol representado como lista generalizada.
Solución:
1. int gradoDeUnDato(String d)
2. int n = 0
3. nodoLg p, q
4. Stack pila = new Stack()
5. p = primerNodo()
6. if ((Character)p.retornaDato() == d.charAt(0)) then
7. p = p.retornaLiga()
8. while (p != null) do
9. n=n+1
10. p = p.retornaLiga()
11. end(while)
12. return n
13. end(if)
14. p = p.retornaLiga()
15. while (p != null) do
16. if (p.retornaSw() == 0) then
17. if ((Character)p.retornaDato() == d.charAt(0)) then
18. return 0
19. end(if)
20. p = p.retornaLiga()
21. else
22. q = (nodoLg)p.retornaDato();
23. if ((Character)q.retornaDato() == d.charAt(0)) then
24. p = q.retornaLiga()
25. while (p != null) do
26. n=n+1
27. p = p.retornaLiga()
28. end(while)
29. return n
30. else
31. pila.apilar(p.retornaLiga())
32. p = q.retornaLiga()
33. end(if)
34. end(if)
35. while (p == null and !pila.esVacia()) do
36. p = (nodoLg)pila.desapilar();
37. end(while)
38. end(while)
39. write("Dato no está en el árbol")
40. return 0
41. Fin(gradoDeUnDato)
Solución:
1. void padreDeUnDato(String d)
2. int n = 0
3. char c
4. nodoLg p, q
5. Stack pila = new Stack()
6. p = primerNodo()
7. if ((Character)p.retornaDato() == d.charAt(0)) then
8. write("El dato es la raiz, por tanto no tiene padre")
9. return
10. end(if)
11. pila.apilar(p.retornaDato())
12. p = p.retornaLiga()
13. while (p != null) do
14. if (p.retornaSw() == 0) then
15. if ((Character)p.retornaDato() == d.charAt(0)) then
16. write("El padre de ", d, " es ", pila.desapilar())
17. return
18. end(if)
19. p = p.retornaLiga()
20. else
21. q = (nodoLg)p.retornaDato()
22. if ((Character)q.retornaDato() == d.charAt(0)) then
23. write("El padre de ", d, " es ", pila.desapilar())
24. return
25. else
26. pila.apilar(p.retornaLiga())
27. pila.apilar(q.retornaDato())
28. p = q.retornaLiga()
29. end(if)
30. end(if)
31. while (p == null and !pila.esVacia()) do
32. c = (Character)pila.desapilar()
33. p = (nodoLg)pila.desapilar()
34. end(while)
35. end(while)
36. write("Dato no está en el árbol")
37. Fin(padreDeUnDato)
4. Elabore algoritmo que determine y retorne los ancestros de un dato entrado como
parámetro en un árbol representado como lista generalizada.
Solución:
1. void ancestrosDeUnDato(String d)
2. int n = 0
3. char c
4. nodoLg p, q
5. Stack pila = new Stack()
6. p = primerNodo()
7. if ((Character)p.retornaDato() == d.charAt(0)) then
8. write("El dato es la raiz, por tanto no tiene ancestros")
9. return
10. end(if)
11. pila.apilar(p.retornaDato())
12. p = p.retornaLiga()
13. while (p != null) do
14. if (p.retornaSw() == 0) then
15. if ((Character)p.retornaDato() == d.charAt(0)) then
16. write("Los ancestros de ", d, " son ")
17. while (!pila.esVacia()) do
18. c = (Character)pila.desapilar()
19. write(c, " ")
20. if (!pila.esVacia()) then
21. p = (nodoLg)pila.desapilar()
22. end(if)
23. end(while)
24. return
25. end(if)
26. p = p.retornaLiga()
27. else
28. q = (nodoLg)p.retornaDato()
29. if ((Character)q.retornaDato() == d.charAt(0)) then
30. write("Los ancestros de ", d, " son ")
31. while (!pila.esVacia()) do
32. c = (Character)pila.desapilar()
33. write(c, " ")
34. if (!pila.esVacia()) then
35. p = (nodoLg)pila.desapilar()
36. end(if)
37. end(while)
38. return
39. else
40. pila.apilar(p.retornaLiga())
41. pila.apilar(q.retornaDato())
42. p = q.retornaLiga()
43. end(if)
44. end(if)
45. while (p == null and !pila.esVacia()) do
46. c = (Character)pila.desapilar()
47. p = (nodoLg)pila.desapilar()
48. end(while)
49. end(while)
50. write("Dato no está en el árbol")
51. Fin(ancestrosDeUnDato)
Solución:
1. int altura(nodoLg L)
2. nodoLg p
3. int g, h
4. h=1
5. if (L == null) then
6. return 0
7. end(if)
8. if (L.retornaLiga() == null) then
9. return 1
10. end(if)
11. p=L
12. while (p != null) do
13. if (p.retornaSw() == 1) then
14. g = altura((nodoLg)p.retornaDato())
15. if (g > h) then
16. h=g
17. end(if)
18. end(if)
19. p = p.retornaLiga()
20. end(while)
21. return h + 1
22. Fin(altura)
6. Elabore un algoritmo que escriba la hilera de abre paréntesis, átomos, comas y cierre
paréntesis de un árbol representado como lista generalizada.
Solución:
7. Elabore un algoritmo que imprima, por niveles, el recorrido sobre un árbol representado
como lista generalizada.
Solución:
1. void muestraPorNiveles()
2. colas cola
3. nodoLg p, q
4. cola = new colas()
5. p = primerNodo()
6. if (p == null) return
7. while (p != null) do
8. if (p.retornaSw() == 0) then
9. write((Character)p.retornaDato(), ", ")
10. else
11. q = (nodoLg)p.retornaDato()
12. write((Character)q.retornaDato(), ", ")
13. cola.encolar(q.retornaLiga())
14. end(if)
15. p = p.retornaLiga()
16. while (p == null and !cola.esVacia()) do
17. p = (nodoLg)cola.desencolar()
18. end(while)
19. end(while)
20. Fin(muestraPorNiveles)
SOLUCIONES MODULO 11
Solución:
1. int hojas(nodoDoble r)
2. int hh
3. hh = 0
4. if (r != null) then
5. if (r.retornaLi() == null and r.retornaLd() == null) then
6. hh = hh + 1
7. else
8. hh = hh + hojas(r.retornaLi()) + hojas(r.retornaLd())
9. end(if)
10. end(if)
11. return hh
12. fin(hojas)
Solución:
1. int grado(nodoDoble r)
2. int g
3. g=0
4. if (r != null) then
5. if (r.retornaLi() != null and r.retornaLd() != null) then
6. g=2
7. else
8. if (r.retornaLi() != null or r.retornaLd() != null) then
9. g=1
10. end(if)
11. end(if)
12. g = mayor(g, grado(r.retornaLi()))
13. g = mayor(g, grado(r.retornaLd()))
14. end(if)
15. return g
16. end(if)
Solución:
1. int altura(nodoDoble r)
2. int altizq, altder
3. if (r == null) then
4. return 0
5. end(if)
6. altizq = 0
7. altder = 0
8. if (r.retornaLi() != null) then
9. altizq = altura(r.retornaLi())
10. end(if)
11. if (r.retornaLd() != null) then
12. altder = altura(r.retornaLd())
13. end(if)
14. return mayor(altizq, altder) + 1
15. fin(altura)
Solución:
Solución:
6. Elabore un algoritmo que imprima por niveles el recorrido sobre un árbol binario
representado como lista ligada.
Solución:
1. void recorrePorNiveles()
2. colas cola
3. nodoDoble p
4. cola = new colas()
5. p = raiz
6. cola.encolar(p)
7. while (!cola.esVacia()) do
8. p = (nodoDoble)cola.desencolar()
9. write(p.retornaDato())
10. if (p.retornaLi() != null) cola.encolar(p.retornaLi())
11. if (p.retornaLd() != null) cola.encolar(p.retornaLd())
12. end(while)
13. Fin(recorrePorNiveles)
7. Escriba un algoritmo que construya la representación como árbol binario en lista ligada
de un árbol n-ario, representado como lista generalizada.
Solución:
1. void convierteLgABinario(arbolLg a)
2. nodoLg p, q
3. nodoDoble x, ultimo
4. Stack pila
5. pila = new Stack()
6. p = a.primerNodo()
7. x = new nodoDoble(p.retornaDato())
8. raiz = x
9. ultimo = x
10. p = p.retornaLiga()
11. while (p != null) do
12. if (p.retornaSw() == 0) then
13. x = new nodoDoble(p.retornaDato())
14. else
15. q = (nodoLg)p.retornaDato()
16. x = new nodoDoble(q.retornaDato())
17. pila.apilar(x)
18. pila.apilar(q.retornaLiga())
19. end(if)
20. ultimo.asignaLi(x)
21. ultimo = x
22. p = p.retornaLiga()
23. while (p != null) do
24. if (p.retornaSw() == 0) then
25. x = new nodoDoble(p.retornaDato())
26. else
27. q = (nodoLg)p.retornaDato()
28. x = new nodoDoble(q.retornaDato())
29. pila.apilar(x)
30. pila.apilar(q.retornaLiga())
31. end(if)
32. ultimo.asignaLd(x)
33. ultimo = x
34. p = p.retornaLiga()
35. end(while)
36. if (!pila.esVacia()) then
37. p = (nodoLg)pila.desapilar()
38. ultimo = (nodoDoble)pila.desapilar()
39. end(if)
40. end(while)
45. Fin(convierteLgABinario)
8. Elabore un algoritmo para construir un árbol binario al cual se le dieron los recorridos
PREORDEN e INORDEN.
Solución:
9. Elabore algoritmo para construir la representación como lista ligada de un árbol binario
completo dada su representación en vector.
Solución:
10. Se dice que un árbol binario es zurdo si: está vacío, o es una hoja, o sus hijos
izquierdo y derecho son ambos zurdos, y más de la mitad de sus descendientes están en
el hijo izquierdo. Elabore un algoritmo que determine si un árbol binario representado
como lista ligada es zurdo o no. Su algoritmo debe retornar verdadero si es zurdo falso de
lo contrario.
Solución:
1. parejaZurda esZurdo(nodoDoble r)
2. parejaZurda pi, pd, p
3. int n, ni, nd
4. boolean b, bi, bd
5. p = new parejaZurda(true, 0);
6. if (r != null) then
7. if (r.retornaLi() == null and r.retornaLd() == null) then
8. p = new parejaZurda(true, 1)
9. else
10. pi = esZurdo(r.retornaLi())
11. pd = esZurdo(r.retornaLd())
12. bi = pi.retornaP1()
13. bd = pd.retornaP1()
14. ni = pi.retornaP2()
15. nd = pd.retornaP2()
16. n = ni + nd + 1
17. b = bi and bd and (ni > nd)
18. p = new parejaZurda(b, n)
19. end(if)
20. end(if)
21. return p
22. end(esZurdo)
SOLUCIONES MODULO 12
Solución:
1. int hojas(nodoDobleEnhebrado r)
2. int hh
3. hh = 0
4. if (r != raiz) then
5. if (r.retornaBi() == 0 and (r.retornaBd() == 0)) then
6. hh = hh + 1
8. else
9. if (r.retornaBi() == 1) then
10. hh = hh + hojas(r.retornaLi())
11. end(if)
12. if (r.retornaBd() == 1) then
13. hh = hh + hojas(r.retornaLd())
14. end(if)
15. end(if)
16. end(if)
17. return hh
18. Fin(hojas)
1. int hojasEnhebrado(nodoDobleEnhebrado r)
2. nodoDobleEnhebrado p
3. int hh = 0
4. p = siguiente(r)
5. while (p != r) do
6. if (p.retornaBi() == 0 and (p.retornaBd() == 0)) then
7. hh = hh + 1
8. end(if)
9. p = siguiente(p)
10. end(while)
11. return hh
12. end(hojasEnhebrado)
Solución:
1. int grado(nodoDobleEnhebrado r)
2. int g
3. g=0
4. if (r != raiz) then
5. if (r.retornaBi() == 1 and r.retornaBd() == 1) then
6. g=2
7. else
8. if (r.retornaBi() == 1 or r.retornaBd() == 1) then
9. g=1
10. end(if)
11. end(if)
12. if (g == 2) return g
13. if (r.retornaBi() == 1) then
14. g = grado(r.retornaLi())
15. end(if)
16. if (g == 2) return g
17. if (r.retornaBd() == 1) then
18. g = grado(r.retornaLd())
19. end(if)
20. end(if)
21. return g
22. Fin(grado)
1. int gradoEnhebrado(nodoDobleEnhebrado r)
2. nodoDobleEnhebrado p
3. int g = 0
4. p = siguiente(r)
5. while (p != r) do
6. if (p.retornaBi() == 1 and (p.retornaBd() == 1)) return 2
7. if (r.retornaBi() == 1 or r.retornaBd() == 1) g = 1
8. p = siguiente(p)
9. end(while)
10. return g
11. Fin(gradoEnhebrado)
Solución:
1. int altura(nodoDobleEnhebrado r)
2. int altizq, altder
3. if (r == raiz) return 0
4. altizq = 0
5. altder = 0
6. if (r.retornaBi() == 1) then
7. altizq = altura(r.retornaLi())
8. end(if)
9. if (r.retornaBd() == 1) then
10. altder = altura(r.retornaLd())
11. end(if)
12. if (altizq > altder) return altizq + 1
13. return altder + 1
14. Fin(altura)
Solución:
Solución:
6. Elabore algoritmo para recorrer en preorden un árbol binario representado como lista
ligada enhebrada en inorden.
Solución:
1. void preorden(nodoDobleEnhebrado r)
2. if (r != raiz) then
3. write(r.retornaDato())
4. if (r.retornaBi() == 1) preorden(r.retornaLi())
5. if (r.retornaBd() == 1) preorden(r.retornaLd())
6. end(if)
7. Fin(preorden)
7. Elabore algoritmo para recorrer en posorden un árbol binario representado como lista
ligada enhebrada en inorden.
Solución:
1. void posorden(nodoDobleEnhebrado r)
2. if (r != raiz) then
3. if (r.retornaBi() == 1) posorden(r.retornaLi())
4. if (r.retornaBd() == 1) posorden(r.retornaLd())
5. write(r.retornaDato())
6. end(if)
7. Fin(posorden)
SOLUCIONES MODULO 13
Solución:
1. nodoDobleAVL dobleRotacionIzquierda(nodoDobleAVL p, nodoDobleAVL q)
2. nodoDobleAVL r
3. r = q.retornaLi()
4. q.asignaLi(r.retornaLd())
5. r.asignaLd(q)
6. p.asignaLd(r.retornaLi())
7. r.asignaLi(p)
8. casos de (r.retornaFb())
9. 0: p.asignaFb(0)
10. q.asignaFb(0)
11. break
12. 1: p.asignaFb(0)
13. q.asignaFb(-1)
14. break
15. -1: p.asignaFb(1)
16. q.asignaFb(0)
17. fin(casos)
18. r.asignaFb(0)
19. return r
20. Fin(dobleRotacionIzquierda)
2. Elabore algoritmo que determine si un árbol binario cualquiera está balanceado por
altura o no. Su algoritmo debe retornar verdadero si está balanceado por altura falso de lo
contrario.
Solución:
1. boolean esBalanceado(nodoDoble r)
2. int hi, hd
3. boolean b = true
4. if (r != null) then
5. hi = altura(r.retornaLi())
6. hd = altura(r.retornaLd())
7. if (abs(hi – hd) > 1) b = false
8. if (b) b = esBalanceado(r.retornaLi())
9. if (b) b = esBalanceado(r.retornaLd())
10. end(if)
11. return b
12. Fin(esBalanceado)
Solución:
1. nodoDobleAVL dobleRotacionDerechaSimplificado(nodoDobleAVL p,
nodoDobleAVL q)
2. nodoDobleAVL r
3. r = q.retornaLd()
4. q.asignaLd(r.retornaLi())
5. r.asignaLi(q)
6. p.asignaLi(r.retornaLd())
7. r.asignaLd(p)
8. p.asignaFb((q.retornaFb() – r.retornaFb())/2)
9. q.asignaFb((p.retornaFb() – r.retornaFb())%2)
// p.asignaFb((p.retornaFb() + r.retornaFb())%3 + q.retornaFb())
// q.asignaFb((p.retornaFb() + r.retornaFb())%3)
10. r.asignaFb(0)
11. return r
12. Fin(dobleRotacionDerechaSimplificado)
1. void conslg(string s)
2. Stack pila = new Stack()
3. x = new nodoLg(null)
4. L=x
5. ultimo = x
6. n = longitud(s)
7. for (i = 2; i < n; i++) do
8. casos de s[i]
9. átomo:
10. ultimo.asignaSw(0)
11. ultimo.asignaDato(s[i])
12. ”,”:
13. x = new nodoLg(null)
14. ultimo.asignaLiga(x)
15. ultimo = x
16. ’(‘:
17. pila.apilar(ultimo)
18. x = new nodoLg(null)
19. ultimo.asignaSw(1)
20. ultimo.asignaDato(x)
21. ultimo = x
22. ’)’:
23. ultimo = pila.desapilar()
24. fin(casos)
25. end(for)
26. Fin(conslg)
1. entero hojasLg(nodoLg r)
2. if (r == null) then
3. return 0
4. end(if)
5. if (r.retornaLiga() == null) then
6. return 1
7. end(if)
8. hojas = 0
9. p = r.retornaLiga()
10. while (p != null) do
11. if (p.retornaSw() == 0) then
12. hojas = hojas + 1
13. else
14. hojas = hojas + hojasLg((nodoLg)p.retornaDato())
15. end(if)
16. p = p.retornaLiga()
17. end(while)
18. return hojas
19. Fin(hojasLg)
entero gradoLg(nodoLg r)
2. if (r == null or r.retornaLiga() == null) then
3. return 0
4. end(if)
5. grado = 0
6. cuenta = 0
7. p = r.retornaLiga()
8. while (p != null) do
9. cuenta = cuenta + 1
10. if (p.retornaSw() == 1) then
11. g = gradoLg((nodoLg)p.retornaDato()
12. if (g > grado) then
13. grado = g
14. end(if)
15. end(if)
16. p = p.retornaLiga()
17. end(while)
18. if (cuenta > grado) then
19. grado = cuenta
20. end(if)
21. return grado
22. Fin(gradoLg)
1. void inorden(nodoDoble r)
2. if (r != null) then
3. inorden(r.retornaLi())
4. write(r.retornaDato())
5. inorden(r.retornaLd())
6. end(if)
7. Fin(inorden)
1. void posorden(nodoDoble r)
2. if (r != null) then
3. posorden(r.retornaLi())
4. posorden(r.retornaLd())
5. write(r.retornaDato())
6. end(if)
7. Fin(posorden)
1. void preorden(nodoDoble r)
2. if (r != null) then
3. write(r.retornaDato())
4. preorden(r.retornaLi())
5. preorden(r.retornaLd())
6. end(if)
7. Fin(preorden)
Algoritmo heapsort:
1. void ordenaAscendenteHeapSort()
2. int i
3. for (i = n / 2; i > 0; i --) do
4. ajuste(i, n)
5. end(for)
6. for (i = n – 1; i > 0; i --) do
7. intercambia(i+1, 1)
8. ajuste(1, i)
9. end(for)
10. Fin (ordenaAscendenteHeapSort)
Árboles enhebrados:
1. nodoDoble siguiente(nodoDoble x)
2. siguiente = x.retornaLd()
3. if (x.retornaBd() == 1)
4. while (siguiente.retornaBi() == 1)
5. siguiente = siguiente.retornaLi()
6. end(while)
7. end(if)
8. return siguiente
9. Fin(siguiente)
1. void inorden(nodoDoble r)
2. p = siguiente(r)
3. while (p != r) do
4. write(p.retornaDato())
5. p = siguiente(p)
6. end(while)
7. Fin(inorden)
void insertaNodo(dato d)
x = new nodoDoble(d)
if(raiz == null){
raiz = x
return
}
p = raiz
q = null
while (p ¡= null)do
q=p
if(d <p.retornaDato()){
p = p.retornali()
} else {
P = p.retornald()
}
If(d < q.retornaDato()){
q.asignali(x)
}else {
q.asignald(x)
}
Algoritmo para hallar nodo de padre en lista generalizada:
Algoritmo siguiente en binario enhebrado en preorden:
1. nodoDoble siguiente(nodoDoble x)
2. siguiente = x.retornaLd()
3. if(x.retornaBi() == 1 and x.retornaBd() == 1)then
4. siguiente = x.retornaLi()
5. end(if)
6. return siguiente
7. fin(siguiente)
1. Se tiene un árbol binario representado como lista ligada enhebrado en inorden.
Elabore un algoritmo que retorne verdadero si el árbol está balanceado por altura,
falso de lo contrario.
3. Se tiene un árbol n-ario representado como lista generalizada. Elabore un algoritmo
que reciba como parámetros dos datos y que retorne verdadero si dichos datos son
primos. Dos datos son primos si sus padres son hermanos.
4. Se tiene un árbol binario de búsqueda representado como lista ligada. Elabore un
algoritmo que elimine el nodo correspondiente a un dato d entrado como parámetro.
Elabore todo método que invoque.
1. void insertaDatoEnAVL(d)
2. x = new nodoAVL(d) Consigue nuevo registro y lo configura