Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4.  
  5. //pendeklarasian struct sebuah tree awal
  6. struct Node{
  7. int data;
  8. Node *kiri;
  9. Node *kanan;
  10. };
  11.  
  12. //fungsi untuk menambahkan node baru
  13. void tambah(Node **root, int databaru)
  14. {
  15. //jika root masih kosong
  16. if((*root) == NULL)
  17. {
  18. //pembuatan node baru
  19. Node *baru;
  20. //pengalokasian memori dari node yang telah dibuat
  21. baru = new Node;
  22. //inisialisasi awal node yang baru dibuat
  23. baru->data = databaru;
  24. baru->kiri = NULL;
  25. baru->kanan = NULL;
  26. (*root) = baru;
  27. (*root)->kiri = NULL;
  28. (*root)->kanan = NULL;
  29. printf("Data bertambah!");
  30. }
  31. //jika data yang akan dimasukkan lebih kecil daripada elemen root, maka akan diletakkan di node sebelah kiri.
  32. else if(databaru<(*root)->data)
  33. tambah(&(*root)->kiri, databaru);
  34. //jika data yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di node sebelah kanan
  35. else if(databaru>(*root)->data)
  36. tambah(&(*root)->kanan, databaru);
  37. //jika saat dicek data yang akan dimasukkan memiliki nilai yang sama dengan data pada root
  38. else if(databaru == (*root)->data)
  39. printf("Data sudah ada!");
  40. }
  41.  
  42. // cetak tree secara preOrder
  43. void preOrder(Node *root)
  44. {
  45. if(root != NULL){
  46. printf("%d ", root->data);
  47. preOrder(root->kiri);
  48. preOrder(root->kanan);
  49. }
  50. }
  51.  
  52. // cetak tree secara inOrder
  53. void inOrder(Node *root)
  54. {
  55. if(root != NULL){
  56. inOrder(root->kiri);
  57. printf("%d ", root->data);
  58. inOrder(root->kanan);
  59. }
  60. }
  61.  
  62. //fungsi yang digunakan untuk mencetak tree secara postOrder
  63. void postOrder(Node *root)
  64. {
  65. if(root != NULL){
  66. postOrder(root->kiri);
  67. postOrder(root->kanan);
  68. printf("%d ", root->data);
  69. }
  70. }
  71.  
  72. void cari_terbesar(Node *p)
  73. {
  74. if(p==NULL)
  75. {
  76. return;
  77. }
  78. else
  79. {
  80. if (p->kanan==NULL)
  81. {
  82. printf("&d", p->data);
  83. return;
  84. }
  85.  
  86. else
  87. {
  88. cari_terbesar(p->kanan);
  89. return;
  90. }
  91. }
  92. }
  93. void cari_terkecil(Node *p)
  94. {
  95. if(p==NULL)
  96. {
  97. return;
  98. }
  99. else
  100. {
  101. if (p->kiri==NULL)
  102. {
  103. printf("&d", p->data);
  104. return;
  105. }
  106.  
  107. else
  108. {
  109. cari_terbesar(p->kiri);
  110. return;
  111. }
  112. }
  113. }
  114.  
  115. void search(Node **root, int cari)
  116. {
  117. if((*root)==NULL)
  118. {
  119. printf("Data Tidak Ditemukan");
  120. }
  121. else if (cari<(*root)->data)
  122. search(&(*root)->kiri,cari);
  123. }
  124. else if (cari<(*root)->data)
  125. search(&(*root)->kanan,cari);
  126. }
  127. else if (cari==(*root)->data)
  128. printf("Data Ditemukan");
  129.  
  130.  
  131. }
  132. //fungsi utama
  133. int main()
  134. {
  135. //deklarasikan variabel
  136. int pil, data;// c;
  137. Node *pohon; //*t;
  138. pohon = NULL; //inisialisasi node pohon
  139. //perulangan do-while
  140. do
  141. {
  142. system("cls"); //bersihkan layar
  143. printf("\t#PROGRAM TREE C++#");
  144. printf("\n\t==================");
  145. printf("\nMENU");
  146. printf("\n----\n");
  147. printf("1. Tambah\n");
  148. printf("2. Lihat pre-order\n");
  149. printf("3. Lihat in-order\n");
  150. printf("4. Lihat post-order\n");
  151. printf("5. Cari Terbesar\n");
  152. printf("6. Cari Terkecil\n");
  153. printf("7. Search\n");
  154. printf("8. Exit\n");
  155. printf("Pilihan : ");
  156. scanf("%d", &pil);
  157. switch(pil)
  158. {
  159. //jika pil bernilai 1
  160. case 1 :
  161. printf("\nINPUT : ");
  162. printf("\n-------");
  163. printf("\nData baru : ");
  164. scanf("%d", &data);
  165. //panggil fungsi untuk menambah node yang berisi data pada tree
  166. tambah(&pohon, data);
  167. break;
  168.  
  169. //jika pil bernilai 2
  170. case 2 :
  171. printf("\nOUTPUT PRE ORDER : ");
  172. printf("\n------------------\n");
  173. if(pohon!=NULL)
  174. //panggil fungsi untuk mencetak data secara preOrder
  175. preOrder(pohon);
  176. else
  177. printf("Masih kosong!");
  178. break;
  179.  
  180. //jika pil bernilai 3
  181. case 3 :
  182. printf("\nOUTPUT IN ORDER : ");
  183. printf("\n------------------\n");
  184. if(pohon!=NULL)
  185. //panggil fungsi untuk mencetak data secara inOrder
  186. inOrder(pohon);
  187. else
  188. printf("Masih kosong!");
  189. break;
  190.  
  191. //jika pil bernilai 4
  192. case 5 :
  193. printf("\nBilangan Terbesar : ");
  194. printf("\n------------------\n");
  195. cari_terbesar(pohon);
  196. break;
  197.  
  198. case 6 :
  199. printf("\nBilangan Terkecil : ");
  200. printf("\n------------------\n");
  201. cari_tekeci(pohon);
  202. break;
  203.  
  204.  
  205.  
  206. }
  207. _getch();
  208. }while(pil != 9); //akan diulang jika input tidak samadengan 5
  209. return EXIT_FAILURE;
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement