Advertisement
juanjo12x

Repetidos_Arbol

Jun 12th, 2014
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.99 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 cont=0;
  10. void crear_arbol(TNodo ** ptrRaiz);
  11. void inserta_nodo(TNodo **ptrRaiz, int valor);
  12. int es_nodo_hoja(TNodo *);
  13. int buscar_repetidos(TNodo*);
  14. int buscar(TNodo**,int);
  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.  
  51. int buscar(TNodo ** raiz,int e){
  52.     TNodo *aux=*raiz;int r,s;
  53.     TNodo *aux1=aux->ptrHI;
  54.     if((aux->valor==e) && (cont!=0))return 1;
  55.     else {
  56.         cont++;
  57.         if(es_nodo_hoja(aux)){
  58.             return 0;
  59.         }else{
  60.             r=buscar(&aux1,e);
  61.             aux1=aux->ptrHD;
  62.             s=buscar(&aux1,e);
  63.             if(r) return 1;// si encuentro en el hijo izquierdo, retorna 0
  64.             else if (s) return 1;//si encuentro , en el hijo derecho , retorna 1
  65.             else return 0;//si no retorna 0
  66.         }
  67.     }
  68. }
  69.  
  70. int buscar_repetidos(TNodo* raiz){
  71.     //cambiar raiz por otra
  72.     int j,r,s;
  73.     int e=raiz->valor;
  74.     TNodo* aux=raiz->ptrHI;
  75.     j=buscar(&raiz,e);
  76.    
  77.     if(j){ //si encuentro valor en la raiz, retorna 1
  78.         return 1;
  79.     }else{
  80.         if(es_nodo_hoja(raiz)){
  81.             return 0;
  82.         }else{//si no es nodo hoja
  83.             cont=0;
  84.              r=buscar_repetidos(aux);
  85.              if (r) return 1; //si encontramos repetidos en el hijo izquierdo
  86.              cont=0;
  87.              aux=raiz->ptrHD;
  88.             s=buscar_repetidos(aux);//si encontramos repetidos en el hijo izquierdo
  89.             if (s) return 0;
  90.         }
  91.      }
  92.    
  93. }
  94. int main(int argc, char** argv) {
  95.     TNodo *ptrRaiz;int repetidos;
  96.     crear_arbol(&ptrRaiz);
  97.     inserta_nodo(&ptrRaiz, 15);
  98.     inserta_nodo(&ptrRaiz, 10);
  99.     inserta_nodo(&ptrRaiz, 17);
  100.     inserta_nodo(&ptrRaiz, 15);
  101.     inserta_nodo(&ptrRaiz, 10);
  102.     inserta_nodo(&ptrRaiz, 5);
  103.     inserta_nodo(&ptrRaiz, 14);
  104.     repetidos=buscar_repetidos(ptrRaiz);
  105.     if (repetidos){
  106.         printf("Hay repetidos\n");
  107.     }else{
  108.         printf("No hay repetidos\n");
  109.     }
  110.    
  111.     return (EXIT_SUCCESS);
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement