home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_03 / 9n03084a < prev    next >
Text File  |  1991-01-16  |  2KB  |  85 lines

  1. /*-----------------------------------
  2.  * This program was used to test the 
  3.  * add1 and add2 functions    
  4.  *-----------------------------------*/
  5. #include <stdio.h>
  6.  
  7. typedef struct NODE* LINK;
  8.  
  9. struct NODE {
  10.   int info;
  11.   LINK left;
  12.   LINK right;
  13. };
  14.  
  15. main()
  16. {
  17.   LINK rootptr1=NULL,rootptr2=NULL;
  18.   int x;
  19.  
  20.   printf("Enter integers terminated \
  21. with ctrl z\n");
  22.   /* Create tree      */
  23.   while (scanf("%d",&x) == 1) {    
  24.     add1(&rootptr1,x);
  25.     add2(&rootptr2,x);
  26.   }
  27.   printf("Using add1\n");
  28.   recurse_traverse(rootptr1);  /* Traverse tree */
  29.   printf("Using add2\n");
  30.   recurse_traverse(rootptr2);      
  31. }
  32. recurse_traverse(rootptr) LINK rootptr;
  33. {
  34.   if (rootptr != NULL) {          /* Is tree null?   */
  35.     recurse_traverse(rootptr -> left);  /* Recurse */
  36.     printf("%d\n",rootptr -> info);
  37.     recurse_traverse(rootptr -> right); /* Recurse */
  38.   }
  39. }
  40. add1(rootpp,val) LINK *rootpp;int val;
  41. {
  42.   LINK newnode,current,previous;
  43.  
  44.   /* Create a new node */
  45.   newnode = (LINK) malloc(sizeof(struct NODE));  
  46.   newnode->info  = val;
  47.   newnode->left  = NULL;
  48.   newnode->right = NULL;
  49.   current = *rootpp;                  
  50.   previous = NULL;
  51.   while (current != NULL) {      /* Search for leaf */
  52.     previous = current;
  53.     if (val < current->info)
  54.        current = current->left;
  55.     else
  56.        current = current->right;
  57.   }
  58.   if (previous == NULL)               /* Null tree? */
  59.      *rootpp = newnode;        /* Node becomes tree */ 
  60.   else
  61.     if (val < previous->info)   /* Add  left/right? */
  62.        previous->left = newnode;     /* Add to left */ 
  63.     else                                
  64.        previous->right = newnode;   /* Add to right */
  65.  
  66. }
  67. add2(pp,val) LINK *pp; int val;
  68. {
  69.   LINK newnode;
  70.  
  71.   /* Create a new node */
  72.   newnode = (LINK) malloc(sizeof(struct NODE)); 
  73.   newnode->info  = val;
  74.   newnode->left  = NULL;
  75.   newnode->right = NULL;
  76.   while (*pp != NULL) {    /* Search for leaf  */
  77.      if (val < (*pp)->info)
  78.        pp = &(*pp)->left;          /* Move pp  */
  79.      else
  80.        pp = &(*pp)->right;         /* Move pp  */
  81.   }
  82.   *pp = newnode;          /* Add node to tree  */
  83. }
  84.  
  85.