Advertisement
juanjo12x

Esta_Intervalo_Arbol

Jun 12th, 2014
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.34 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct nodo{
  5.     int valor;
  6.     struct nodo* ptrHI;
  7.     struct nodo* ptrHD;
  8. } TNodo;
  9. int min,max;
  10. void crear_arbol(TNodo ** ptrRaiz);
  11. void inserta_nodo(TNodo **ptrRaiz, int valor);
  12. int esta_intervalo(TNodo **);
  13. int es_nodo_hoja(TNodo *);
  14.  
  15. void crear_arbol(TNodo ** ptrRaiz){
  16.     *ptrRaiz = NULL;
  17. }
  18.  
  19. void inserta_nodo(TNodo **ptrRaiz, int valor){
  20.     TNodo *ptrHoja, *ptrRecorrido, *ptrPadre;
  21.     ptrHoja = (TNodo*)malloc(sizeof(TNodo));
  22.     ptrHoja->valor = valor;
  23.     ptrHoja->ptrHI=ptrHoja->ptrHD=NULL;
  24.    
  25.     if(*ptrRaiz){
  26.         ptrRecorrido = *ptrRaiz;
  27.         ptrPadre = NULL;
  28.        
  29.         while (ptrRecorrido){
  30.             ptrPadre = ptrRecorrido;
  31.             if (ptrRecorrido->valor > valor)
  32.                 ptrRecorrido = ptrRecorrido->ptrHI;
  33.             else
  34.                 ptrRecorrido = ptrRecorrido->ptrHD;                  
  35.         }
  36.         if (ptrPadre->valor > valor)
  37.             ptrPadre->ptrHI = ptrHoja;
  38.         else
  39.             ptrPadre->ptrHD = ptrHoja;
  40.     }
  41.     else{
  42.      *ptrRaiz = ptrHoja;  
  43.     }          
  44. }
  45. int es_nodo_hoja(TNodo *ptrRaiz){
  46.     if (ptrRaiz->ptrHI ==NULL) return 1;
  47.     if (ptrRaiz->ptrHD ==NULL) return 1;
  48.     return 0;
  49. }
  50. int esta_intervalo(TNodo** ptrRaiz){
  51.     TNodo *aux=*ptrRaiz;//nodo auxiliar
  52.     TNodo *aux1;
  53.     int r,s;
  54.     if(aux->valor>=min && aux->valor<=max ){
  55.         /*si es nodo hoja , retorna 1*/
  56.         if(es_nodo_hoja(aux)){
  57.             return 1;
  58.         }else{
  59.             aux1=aux->ptrHI;
  60.             r=esta_intervalo(&aux1);
  61.             aux1=aux->ptrHD;
  62.             s=esta_intervalo(&aux1);
  63.             if(r && s) return 1; //si esta en el intervalo
  64.             else return 0;
  65.         }
  66.     }else{
  67.         return 0;
  68.     }
  69.            
  70. }
  71. int main(int argc, char** argv) {
  72.     TNodo *ptrRaiz;
  73.     int esta;
  74.     crear_arbol(&ptrRaiz);
  75.     inserta_nodo(&ptrRaiz, 15);
  76.     inserta_nodo(&ptrRaiz, 10);
  77.     inserta_nodo(&ptrRaiz, 17);
  78.     inserta_nodo(&ptrRaiz, 19);
  79.     inserta_nodo(&ptrRaiz, 16);
  80.     inserta_nodo(&ptrRaiz, 5);
  81.     inserta_nodo(&ptrRaiz, 14);
  82.     scanf("%d",&min);
  83.     scanf("%d",&max);
  84.     esta=esta_intervalo(&ptrRaiz);
  85.     if (esta){
  86.         printf("Estan en el intervalo\n");
  87.     }else{
  88.         printf("No estan en el intervalo\n");
  89.     }
  90.     return (EXIT_SUCCESS);
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement