Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. typedef struct BiFa {
  6.     int ertek;
  7.     struct BiFa *bal, *jobb;
  8. } BiFa;
  9.  
  10. BiFa *beszur(BiFa *gyoker, int ertek) {
  11.     if (gyoker == NULL) {
  12.         BiFa *uj = (BiFa*) malloc(sizeof(BiFa));
  13.         uj->ertek = ertek;
  14.         uj->bal = uj->jobb = NULL;
  15.         return uj;
  16.     }
  17.     if (ertek < gyoker->ertek) {        /* balra szur */
  18.         gyoker->bal = beszur(gyoker->bal, ertek);
  19.     }
  20.     else if (ertek > gyoker->ertek) {   /* jobbra szur */
  21.         gyoker->jobb = beszur(gyoker->jobb, ertek);
  22.     }
  23.     else {
  24.         /* mar benne van */
  25.     }
  26.     return gyoker;
  27. }
  28.  
  29. void kiir ( BiFa * a)
  30. {
  31.     if(a == NULL) return;
  32.     kiir(a->bal);
  33.     printf("%d\n",a->ertek);
  34.     kiir(a->jobb);
  35. }
  36.  
  37.  
  38. void torol ( BiFa * a)
  39. {
  40.     if(a == NULL) return;
  41.     torol(a->bal);
  42.     torol(a->jobb);
  43.     free(a);
  44. }
  45. int szamol (BiFa  *a)
  46. {
  47.     if(a == NULL)
  48.         return 0;
  49.     return szamol(a->bal ) + szamol(a->jobb) +1;
  50.  
  51. }
  52.  
  53. int osszeg (BiFa * a)
  54. {
  55.     if (a== NULL) return 0;
  56.     return osszeg(a->bal) + osszeg(a->jobb) + a->ertek;
  57. }
  58.  
  59. BiFa * keres (BiFa * a, int ertek)
  60. {
  61.     BiFa * mozgo = a;
  62.     while (mozgo != NULL && abs(mozgo ->ertek) != abs(ertek))
  63.     {
  64.         if(abs(mozgo ->ertek) < abs(ertek)) mozgo = mozgo->jobb;
  65.         else mozgo = mozgo->bal;
  66.     }
  67.     return mozgo;
  68. }
  69.  
  70.  
  71. void negal (BiFa * a)
  72. {
  73.  
  74.     if (a== NULL) return;
  75.     negal(a->bal);
  76.     negal(a->jobb);
  77.     a->ertek = a->ertek  * -1;
  78. }
  79.  
  80. void tukroz (BiFa *a)
  81. {
  82.     if (a == NULL) return;
  83.     BiFa * seged = a->bal;
  84.     a->bal = a->jobb;
  85.     a->jobb = seged;
  86.     tukroz(a->jobb);
  87.     tukroz(a->bal);
  88.     //printf("%d\n", a->ertek);
  89.  
  90. }
  91.  
  92. int main(void) {
  93.     int minta[] = {15, 96, 34, 12, 14, 56, 21, 11, 10, 9, 78, 43, 0};
  94.     BiFa *gyoker = NULL;
  95.     for (int i = 0; minta[i] > 0; i++)
  96.         gyoker = beszur(gyoker, minta[i]);
  97.     kiir(gyoker);
  98.     /* Ide tedd be a kipróbálandó függvények hívásait! */
  99.     //torol(gyoker);
  100.     BiFa * proba = keres(gyoker, 12);
  101.     printf("\n%d\n\n",proba->ertek);
  102.     negal(gyoker);
  103.     kiir(gyoker);
  104.     proba = keres(gyoker, -56);
  105.     printf("\n\n%d\n\n",proba->ertek);
  106.     tukroz(gyoker);
  107.     kiir(gyoker);
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement