alonsosjumper

AVL

Jun 11th, 2011
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. void ComprobarIzqdo(nodo n, Abin A, int *error){
  2.  
  3. if (n!=NODO_NULO){
  4. if (RecuperarB(n,A) < RecuperarB(RaizB(A),A)){
  5. ComprobarIzqdo(HijoIzqdoB(n,A),A,error);
  6. ComprobarIzqdo(HijoDrchoB(n,A),A,error);
  7. }else{
  8. *error = 1;
  9. }
  10. }
  11.  
  12. }
  13.  
  14. void ComprobarDrcho(nodo n, Abin A, int *error){
  15.  
  16. if (n!=NODO_NULO){
  17. if (RecuperarB(n,A) > RecuperarB(RaizB(A),A)){
  18. ComprobarDrcho(HijoDrchoB(n,A),A,error);
  19. ComprobarDrcho(HijoIzqdoB(n,A),A,error);
  20. }else{
  21. *error = 1;
  22. }
  23. }
  24. }
  25.  
  26. int Binario_AVL (Abin A){
  27.  
  28. int error = 0;
  29.  
  30. if (ArbolVacioB(A)){
  31. return 0;
  32. }
  33.  
  34. ComprobarIzqdo(HijoIzqdoB(RaizB(A),A),A,&error);
  35. if (error == 1)
  36. return 1;
  37.  
  38. ComprobarDrcho(HijoDrchoB(RaizB(A),A),A,&error);
  39. if (error == 1)
  40. return 1;
  41.  
  42. Binario_AVL_rec(RaizB(A),A, &error);
  43.  
  44. return error;
  45. }
  46.  
  47.  
  48. void Binario_AVL_rec (nodo n, Abin A, int *error){
  49.  
  50. int equilibrio;
  51.  
  52. if (n!=NODO_NULO){
  53.  
  54. if (HijoIzqdoB(n,A) != NODO_NULO){
  55. if (RecuperarB(HijoIzqdoB(n,A), A) > RecuperarB(n,A)){
  56. *error = 1;
  57. }
  58. }
  59. if (HijoDrchoB(n,A) != NODO_NULO){
  60. if (RecuperarB(HijoDrchoB(n,A), A) < RecuperarB(n,A)){
  61. *error = 1;
  62. }
  63. }
  64.  
  65. equilibrio = AlturaRec(HijoDrchoB(n,A),A) - AlturaRec(HijoIzqdoB(n,A),A);
  66.  
  67. if (equilibrio <= -2 || equilibrio >= 2){
  68. *error = 1;
  69. }
  70.  
  71. Binario_AVL_rec (HijoIzqdoB(n,A),A,error);
  72. Binario_AVL_rec (HijoDrchoB(n,A),A,error);
  73.  
  74. }
  75.  
  76. }
  77.  
  78.  
  79. int AlturaRec (nodo n, Abin A){
  80.  
  81. if (n == NODO_NULO)
  82. return (0);
  83.  
  84. return (1 + Maximo(AlturaRec(HijoIzqdoB(n,A),A) , AlturaRec(HijoDrchoB(n,A),A)));
  85. }
  86.  
  87.  
  88. int Maximo (int a, int b){
  89.  
  90. if (a >= b){
  91. return (a);
  92. }else{
  93. return (b);
  94. }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment