Advertisement
Sawy3R11

AiSD_Lab_5_Drzewa_BST

May 10th, 2016
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.65 KB | None | 0 0
  1. /* dodać jeszcze następnik, poprzednik, usuwanie, zwalnianie pamieci */
  2. //DK
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5.  
  6. struct element {
  7.     int key;
  8.     struct element *parent;
  9.     struct element *left;
  10.     struct element *right;
  11. };
  12.  
  13. struct element *BST_WSTAW(struct element *T, struct element *Z);
  14. struct element *BST_szukaj(struct element *x, int k);
  15. struct element *BST_min(struct element *x);
  16. struct element *BST_max(struct element *x);
  17. void Inorder( struct element *x);  
  18.  
  19. int main()
  20. {
  21.     struct element *head = NULL;
  22.     struct element *nowy = NULL;
  23.     char znak;  
  24.     int key;
  25.  
  26.     printf("Legenda:\n*)d   dodaj do BST\n*)w   wyswietl BST\n*)s   szukaj\n*)l min\n*)h    max\n\n");
  27.  
  28.     while (1)
  29.     {
  30.         fflush(stdin);
  31.         znak = getchar();
  32.         switch(znak)
  33.         {
  34.             case 'd':
  35.                 nowy = (struct element*) malloc(sizeof(struct element));
  36.                 printf("\nPodaj key: ");
  37.                 scanf("%d", &key);
  38.                 nowy->key = key;
  39.                 nowy->left = NULL;
  40.                 nowy->right = NULL;
  41.                 head = BST_WSTAW(head, nowy);
  42.                 break;  
  43.             case 's':
  44.                 nowy = (struct element*) malloc(sizeof(struct element));
  45.                 printf("\nPodaj szukany element: ");
  46.                 scanf("%i", &key);
  47.                 nowy = BST_szukaj(head, key);
  48.                 if(nowy != NULL)
  49.                     printf("\nZnaleziono! ");
  50.                 else
  51.                     printf("\nNie znaleziono! ");
  52.                 break;
  53.             case 'l':
  54.                 nowy = (struct element*) malloc(sizeof(struct element));  
  55.                 nowy = BST_min(head);
  56.                 printf("\nMinimum : %i\n", nowy->key);
  57.                 break;
  58.             case 'h':
  59.                 nowy = (struct element*) malloc(sizeof(struct element));  
  60.                 nowy = BST_max(head);
  61.                 printf("\nMaksiumum : %i\n", nowy->key);
  62.                 break;
  63.             case 'w':
  64.                 Inorder(head);
  65.                 printf("\n");
  66.                 break;
  67.             case 'q':
  68.                 return 0;
  69.  
  70.         }
  71.     }
  72.     return 0;
  73. }
  74.  
  75. struct element *BST_WSTAW(struct element *T, struct element * Z)
  76. {
  77.     struct element *y = NULL;
  78.     struct element *x = T;
  79.  
  80.     while (x!=NULL)
  81.     {
  82.         y = x;
  83.         if ( (Z->key) < (x->key) )
  84.             x = x->left;
  85.         else x = x->right;
  86.     }
  87.  
  88.         Z->parent = y;
  89.  
  90.         if(y == NULL)
  91.             T = Z;
  92.         else if( (Z->key) < (y->key) )
  93.             y->left = Z;
  94.         else y->right = Z;
  95.    
  96.    
  97.     return T;
  98. }
  99.  
  100. void Inorder( struct element *x)
  101. {
  102.     if( x!=NULL )
  103.     {
  104.         Inorder( x->left);
  105.         printf("%d-", x->key);
  106.         Inorder( x->right );
  107.     }
  108. }
  109. struct element *BST_szukaj(struct element *x, int k)
  110. {
  111.     while (x!=NULL && k!=(x->key))
  112.     {
  113.         if (k < (x->key))
  114.             x = x->left;
  115.         else x = x->right;
  116.     }
  117.  
  118.     return x;
  119. }
  120.  
  121. struct element *BST_min(struct element *x)
  122. {
  123.     while (x->left != NULL )
  124.         x = x->left;
  125.     return x;
  126. }
  127.  
  128. struct element *BST_max(struct element *x)
  129. {
  130.     while (x->right != NULL )
  131.         x = x->right;
  132.     return x;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement