Advertisement
Guest User

Hallow GAY

a guest
May 23rd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. struct data {
  6. int angka;
  7. struct data *kiri;
  8. struct data *kanan;
  9. };
  10.  
  11. struct data *root = NULL;
  12.  
  13. int tinggi (struct data *temp){
  14. int h = 0;
  15. if (temp != NULL) {
  16. int tinggi_kiri = tinggi (temp->kiri);
  17. int tinggi_kanan = tinggi (temp->kanan);
  18. int tinggi_max;
  19. if (tinggi_kiri > tinggi_kanan) {
  20. tinggi_max = tinggi_kiri;
  21. } else {
  22. tinggi_max = tinggi_kanan;
  23. }
  24. h = tinggi_max + 1;
  25. }
  26.  
  27. return h;
  28. }
  29.  
  30. int difference(struct data *temp){
  31. int tinggi_kiri = tinggi (temp->kiri);
  32. int tinggi_kanan = tinggi (temp->kanan);
  33. int b_faktor = tinggi_kiri - tinggi_kanan;
  34.  
  35. return b_faktor;
  36. }
  37.  
  38. struct data *rr_rotasi(struct data *parent){
  39. struct data *temp;
  40. temp = parent->kanan;
  41. parent->kanan = temp->kiri;
  42. temp->kiri = parent;
  43.  
  44. return temp;
  45. }
  46.  
  47. struct data *ll_rotasi(struct data *parent){
  48. struct data *temp;
  49. temp = parent->kiri;
  50. parent->kiri = temp->kanan;
  51. temp->kanan = parent;
  52.  
  53. return temp;
  54. }
  55.  
  56. struct data *lr_rotasi(struct data *parent){
  57. struct data *temp;
  58. temp = parent->kiri;
  59. parent->kiri = rr_rotasi(temp);
  60.  
  61. return ll_rotasi(parent);
  62. }
  63.  
  64. struct data *rl_rotasi(struct data *parent){
  65. struct data *temp;
  66. temp = parent->kanan;
  67. parent->kanan = ll_rotasi(temp);
  68.  
  69. return rr_rotasi(parent);
  70. }
  71.  
  72. struct data *balance(struct data *temp){
  73. int bal_faktor = difference(temp);
  74. if (bal_faktor > 1) {
  75. if (difference(temp->kiri) > 0) {
  76. temp = ll_rotasi(temp);
  77. } else {
  78. temp = lr_rotasi(temp);
  79. }
  80. } else if (bal_faktor < -1) {
  81. if (difference(temp->kanan) > 0) {
  82. temp = rl_rotasi(temp);
  83. } else {
  84. temp = rr_rotasi(temp);
  85. }
  86. }
  87.  
  88.  
  89. return temp;
  90. }
  91.  
  92. struct data *insert(struct data *root){
  93. struct data *new_cus;
  94. int angka;
  95.  
  96. do {
  97. printf("Masukkan Angka : ");
  98. scanf("%d", &angka);
  99. getchar();
  100. } while(angka < 0 || angka > 100);
  101.  
  102. new_cus = (struct data *)malloc(sizeof(struct data));
  103.  
  104. if (root == NULL) {
  105. root = new_cus;
  106. root->angka = angka;
  107. root->kiri = NULL;
  108. root->kanan = NULL;
  109. return root;
  110. } else if (angka < root->angka) {
  111. root->kiri = insert(root->kiri);
  112. root = balance (root);
  113. } else if (angka >= root->angka) {
  114. root->kanan = insert(root->kanan);
  115. root = balance (root);
  116. }
  117.  
  118. printf("Input Data Berhasil ...");
  119. getchar();
  120.  
  121. return root;
  122. }
  123.  
  124. void tampil(struct data *ptr, int level){
  125. int a;
  126. system("clear");
  127. if (ptr != NULL) {
  128. tampil(ptr->kanan, level + 1);
  129. printf("\n");
  130. if (ptr == root)
  131. printf("ROOT -> : ");
  132. for (a = 0; a < level && ptr != root; a++)
  133. printf(" ");
  134.  
  135. printf("%d", ptr->angka);
  136. tampil(ptr->kiri, level + 1);
  137.  
  138. }
  139. }
  140.  
  141. //INORDER => Left Node Right//
  142. void tampilinorder(struct data *root){
  143.  
  144. if (root != NULL) {
  145. /*LEFT*/ tampilinorder(root->kiri);
  146. /*NODE*/ printf("-%d\n", root->angka); //NODE
  147. /*RIGHT*/ tampilinorder(root->kanan);
  148. }
  149.  
  150. }
  151.  
  152. void menu(){
  153. printf("AVL TREE\n");
  154. printf("========\n\n");
  155. printf("1. Insert Data\n");
  156. printf("2. Tampilkan Tree\n");
  157. printf("3. Exit\n");
  158. }
  159.  
  160. int main(){
  161. int pilih;
  162.  
  163. while (pilih != 3) {
  164. do {
  165. system("clear");
  166. menu();
  167. printf("Masukkan Pilihan Yang Diinginkan : ");
  168. scanf("%d", &pilih);
  169. getchar();
  170. } while(pilih < 0 || pilih > 3);
  171.  
  172. if (pilih == 1) {
  173. root = insert(root);
  174. } else if (pilih == 2) {
  175. if (root == NULL) {
  176. printf("Data Tree Kosong, Harap Masukkan Data Terlebih Dahulu");
  177. getchar();
  178. } else {
  179. tampil(root, 1);
  180. }
  181. } else if (pilih == 3) {
  182. printf("Terima Kasih Telah Menggunakan Aplikasi Ini, Kenyamanan Anda Adalah Prioritas Kami ^_^");
  183. getchar();
  184. break;
  185. }
  186. }
  187.  
  188. return 0;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement