Advertisement
lukhavi

ArbolInsercionC

Dec 5th, 2020
1,633
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct _Node{
  5.     int value;
  6.     int count;
  7.     struct _Node *l,*r;
  8. }Node;
  9.  
  10. Node *raiz = NULL;
  11.  
  12. void inOrdenCreciente(Node *root);
  13. //void inOrdenDecreciente(Node *root);
  14. //void postOrden(Node *nodo);
  15. //void postOrdenDelTree(Node **nodo);
  16.  
  17. Node * addNodeBTS(Node **root,int valor);
  18. //void freeNodeBTS(Node *root);
  19.  
  20. //Node * delTree(Node *t);
  21.  
  22. int main(void){
  23.    
  24.     addNodeBTS(&raiz,2);
  25.     addNodeBTS(&raiz,78);
  26.     addNodeBTS(&raiz,2);
  27.     addNodeBTS(&raiz,7);
  28.     addNodeBTS(&raiz,8);
  29.     addNodeBTS(&raiz,8);
  30.    
  31.     //inOrdenCreciente(raiz);
  32.     //printf("Recorrido del arbol en Post-Orden:\n\n");
  33.     //postOrden(raiz);
  34.     printf("Recorrido In-Orden creciente:\n\n");
  35.     inOrdenCreciente(raiz);
  36.     //printf("Recorrido In-Orden decreciente:\n\n");
  37.     //inOrdenDecreciente(raiz);
  38.    
  39.    
  40.     //postOrdenDelTree(&raiz);
  41.    
  42.     //freeNodeBTS(raiz);
  43.     //delTree(raiz);
  44.     //postOrden(raiz);
  45.     return 0;
  46.    
  47. }
  48. //root puntero a Node
  49. // *root = raiz
  50. Node * addNodeBTS(Node **root,int _value){
  51.    
  52.     Node * node = NULL;
  53.     Node **Pnode = &(*root); //  *root = raiz, luego Pnode =&raiz | Pnode apunta a raiz inicialmente|
  54.    
  55.         while((*Pnode)!=NULL ){
  56.             if(_value > (*Pnode)->value)
  57.                 Pnode = &((*Pnode)->r);
  58.             else if(_value < (*Pnode)->value)
  59.                 Pnode = &((*Pnode)->l);
  60.             else{   // _value == (*Pnode)->value
  61.                 ((*Pnode)->count)++;
  62.                 return *Pnode;
  63.             }      
  64.         }
  65.        
  66.         node = (Node *)malloc(sizeof(Node));    // creamos nodo
  67.         if(node==NULL){
  68.             printf("*** Error: No hay memoria disponible para agregar mas nodos al arbol binario\n");
  69.             return NULL;
  70.         }
  71.         node->value = _value;
  72.         node->l = NULL;
  73.         node->r = NULL;
  74.         node->count = 1;
  75.         *Pnode = node;  // Pnode apunta a raiz cuando no hay ningun nodo, *Pnode = raiz ,se asigna el primer nodo en ese caso.
  76.                         // Pnode es un puntero que apunta a las direcciones izquierda o derecha de cada nodo segun el criterio.
  77.    
  78.     return node;   
  79. }
  80.  
  81. void inOrdenCreciente(Node *nodo){
  82.     if(nodo)
  83.     {
  84.         inOrdenCreciente(nodo->l);
  85.         printf("%d:%d\n", nodo->value, nodo->count);
  86.         inOrdenCreciente(nodo->r);
  87.     }
  88.    
  89. }
  90.  
  91.  
  92.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement