modul alpro&strukdat

Download Modul Alpro&StrukDat

If you can't read please download the document

Upload: hari-k-marthin-ii

Post on 07-Nov-2015

395 views

Category:

Documents


57 download

DESCRIPTION

Cover : memuat judul tugas, anggota kelompok, nama kelas dan logo Universitas Siliwangi.Pendahuluan : kata pengantar dan daftar isiBab I : Pendahuluan, berisi latar belakang dan permasalahan yang timbul dimasing-masing tempat studi kasus.Bab II : Deskripsi Organisasi, berisi deskripsi dari fungsi organisasi, struktur organisasi dan job deskripsi.Bab III : Analisis Sistem, berisi 1. Visi organisasi dan visi pengembangan sistem, 2. Pemodelan Bisnis : analisis rantai nilai/ value chain dan siklus hidup sumber daya, pemetaan setiap fungsi bisnis terhadap unit organisasi, pemodelan setiap proses bisnis dengan swimlane atau flowchart. 3. Sistem dan Teknologi Saat Ini : deskripsikan kondisi dari setiap sistem dan teknologi yang ada.

TRANSCRIPT

Microsoft Word - Modul Alpro&StrukDat

M O D U L P R A K T I K U M

ALGORITMA DAN STRUKTUR DATA

TEKNIK INFORMATIKAFAKULTAS TEKNIK UNIVERSITAS SILIWANGIJl. Siliwangi No. 24 Tasikmalaya Kotak Pos 164 Tlp. (0265) 323537E-Mail : [email protected] ; URL : http://www.unsil.ac.id9

BAB I PENGANTAR C++

1. SEJARAH C++C++ diciptakan oleh Bjarne Stroustrup di laboratorium Bell pada awal tahun1980-an, sebagai pengembangan dari bahasa C dan Simula. Saat ini, C++ merupakan salah satu bahasa yang paling populer untuk pengembangan software berbasis OOP. Kompiler untuk C++ telah banyak beredar di pasaran. Software developer yang paling diminati adalah Borland Inc. dan Microsoft Corp. Produk dari Borland untuk kompiler C++ adalah Turbo C++, Borland C++, Borland C++ Builder. Sedangkan dari Microsoft adalah Ms.Visual C++. Walaupun banyak kompiler yang tersedia, namun pada intinya bahasa pemrograman yang dipakai adalah C++. Sebelum mulai melakukan kode program, sebaiknya diingat bahwa C++ bersifat case sensitive, yang artinya huruf besar dan huruf kecil dibedakan.

2. STRUKTUR BAHASA C++Salah satu cara untuk balajar bahasa pemrograman adalah dengan langsung mempraktikannya. Cobalah contoh program berikut://program pertamaku#include #include void main(){cout", ps -> data); printf("NULL\n");}int main (){NODPTR pel; NODPTR n; CiptaSenarai(&pel); n = NodBaru(55);SisipSenarai(&pel, n, NULL); n= NodBaru(75); SisipSenarai(&pel, n, NULL); CetakSenarai(pel);return 0;}

CONTOH LATIHAN :Buatlah program untuk memasukkan beberapa data dalam sebuah senarai (linked list), jika akan mengakhiri tekan n maka akan muncul semua node yang masuk ke dalam linked list tersebut.

//Program:link2#include #include #include #include typedef struct node { int lkey;char name[10];struct node* next;} TNODE;TNODE *first, *last;int LoadNode(TNODE *p); void FreeNode(TNODE *p); void PrintNode(TNODE *p); void CreateList(){TNODE *p;int n=sizeof(TNODE);first=last=0; q=first;while(q) {if(q->lkey == key) break;q=q->next;}if(q==0) {printf("\nTidak ada node yang mempunyai kunci atau senarai kosong");return 0;}if (((p=(TNODE*)malloc(n))!=0) && (LoadNode(p)==1)){if(q==last) { p->next=0; last->next=p; last=p;}2929

for(;;){if( (p=(TNODE*)malloc(n))==0 ){printf("\nmemori tidak cukup");break;}if(LoadNode(p)!=1){ FreeNode(p); break;}p->next=0;if (first==0) first=last=p; else {last->next=p;last=p;}}}int LoadNode(TNODE *p){char opt;printf("\nMasukkan node baru?");opt=getche(); opt=toupper(opt); if(opt!='N') {puts("\nMasukkan data untuknode:");printf("\nlkey:\t");if (scanf("%d",&(p->lkey))!=1)return 0; printf("\nname:\t");if (scanf("%s",p->name)!=1) return0;return 1;}

elsereturn -1;}void FreeNode(TNODE *p) {free(p);}void ViewAllList(){TNODE *p; p=first; while(p) { PrintNode(p); p=p->next;}}TNODE* FindNode(int key) else {p->next=q->next;q->next=p;}return p;}if(p==0)printf("\nMemori tidak cukup");else FreeNode(p); return 0;}TNODE* InsertAfterLast(){TNODE *p;int n=sizeof(TNODE);if (((p=(TNODE*)malloc(n))!=0) && (LoadNode(p)==1)){p->next=0;if (first==0) first=last=p; else {last->next=p;last=p;}return p;}if(p==0)printf("\nMemori tidak cukup");else FreeNode(p); return 0;}void RemoveFirst(){TNODE *p; if(first==0) return; if(first==last) { FreeNode(first); first=last=0; return;} p=first; first=first->next; FreeNode(p);}void RemoveLast(){TNODE *p, *q; if(first==0) return; if(first==last) { FreeNode(first);{TNODE *p; p=first; while(p) {if(p->lkey == key) return p;p=p->next;}return 0;}void PrintNode(TNODE *p){if(p) printf("\n%d\t%s",p->lkey,p->name);}TNODE* InsertBeforeFirst(){TNODE *p;int n=sizeof(TNODE);if (((p=(TNODE*)malloc(n))!=0)&& (LoadNode(p)==1)){if (first==0) { p->next=0; first=last=p;}else {p->next=first;first=p;}return p;}if(p==0)printf("\nMemori tidak cukup");else FreeNode(p); return 0;}TNODE* InsertBeforeKey(int key){TNODE *p, *q, *q1; int n=sizeof(TNODE); q1=0;q=first;while(q) {if(q->lkey == key) break;q1=q;q=q->next;}if(q==0) {printf("\nTidak ada node yang mempunyai kunci atau senarai kosong");return 0;}if (((p=(TNODE*)malloc(n))!=0) first=last=0;return;} q=0; p=first;while(p!=last) {q=p;p=p->next;} p=last; FreeNode(p); q->next=0; last=q;}void RemoveByKey(int key){TNODE *p, *q; if(first==0) return;q=0;p=first;while(p) {if(p->lkey == key) break;q=p;p=p->next;}if(!p) {printf("\nTidak ada node yang mempunyai kunci");return;}if(first==last) { FreeNode(first); first=last=0; return;}if(p==first) { first=first->next; FreeNode(p); return;}if(p==last) { q->next=0; last=q; FreeNode(p); return;}q->next=p->next; FreeNode(p);}void DeleteList(){TNODE *p; p=first; while(p) {&& (LoadNode(p)==1)) {if(q==first) { p->next=first; first=p;}else {p->next=q;q1->next=p;}return p;}if(p==0)printf("\nMemori tidak cukup");else FreeNode(p); return 0;}TNODE* InsertAfterKey(int key){TNODE *p, *q;int n=sizeof(TNODE); first=first->next; FreeNode(p); p=first;}last=0;}void main(){ CreateList(); ViewAllList(); InsertAfterLast(); ViewAllList(); RemoveFirst(); ViewAllList(); InsertAfterKey(1); ViewAllList(); RemoveByKey(1); ViewAllList(); DeleteList(); ViewAllList();}

LATIHAN1. Buatlah sebuah linked list non circular yang berisi nim = 22022807 , nama = Agung.2. Buat fungsi untuk menambahkan node single linked list non circular dimana tiap node mengandung informasi nim dan nama. Peletakan posisi node urut berdasar nim secara ascending, jadi bisa tambah depan, belakang maupun tambah ditengah. Isikan data nim dan nama sesuai tabel di bawah ini.

NodeNimNama222022812Helva322022809Andreas422022801Bram3. Buatlah fungsi untuk menampilkan data 4 buah node yang telah anda bentuksebelumnya. Contoh tampilan : Nim Nama22022801 Bram22022807 Agung22022809 Andreas22022812 Helva4. Buatlah fungsi untuk mencari data nama berdasar nim.Contoh tampilan :input nim = 22022807...................................................searching name was found : Agung5. Buatlah sebuah fungsi untuk menghapus sebuah node berdasar input nim. Contoh tampilan :nim that u want to be deleted : 22022809...................................................searchingnim is identified and was deleted successfully6. Buatlah sebuah Single Linked List Circular yang mempunyai 5 buah simpul seperti pada contoh dibawah ini.a. Tuliskan listing program untuk membaca data seluruh simpul dengan menggunakan perulangan (while/for).b. Tuliskan listing program untuk menambah sebuah simpul baru dengan data 5 yang diletakan diantara data 30 dan data 20.c. Tuliskan listing program untuk menghapus simpul dengan data 20 tanpa merusak senarai.d. Tuliskan listing program untuk menghapus semua simpul denganmenggunakan variabel Bantu dengan menggunakan perulangan (while/for). Kepala ekor

50 40 30 20 10

7. Buatlah program Single Linked List Circular yang fleksibel dan dinamis. Dimana user dapat menambah simpul baru beserta datanya, membaca semua data pada senarai, menghapus simpul dengan data yang ditentukan oleh user, dan dapat menghapus semua simpul yang ada. Jangan lupa membuat trapping errornya.BAB VISTACK DAN QUEUE DENGAN ARRAY

1. Pengertian stack dan queueTumpukan dapat diartikan sebagai suatu kumpulan data yang seolah-olah terlihat seperti ada data yang diletakkan di atas data yang lain seperti pada gambar 01. Saat kita ingin mengambil data A, maka data-data yang berada di atasnya haruslah lebih dulu dikeluarkan ( di-POP ). Hal ini membuat tumpukan / stack memiliki ciri-ciri Last In First Out ( LIFO ) yang berarti data yang masuk terakhir akan keluar pertama.Sedangkan queue (antrian) hampir mirip dengan stack, tapi hanya saja, data yangmasuk pertama kali akan keluar pertama kali dari Queue.( Bisa dilihat pada gambar 02 ). FIFO ( First In First Out )

EDCBA

ABCDE

Gambar 01 Gambar 02

2. Penyajian stack dan queueStack dan/atau Queue dapat disajikan baik dengan Array maupun dengan struct. Pada Array, stack ataupun queue yang disajikan bersifat statis. Ini disebabkan karena jumlah maksimal data pada array sudah ditentukan sejak awal.Contoh deklarasi stack dengan struct :Struct stack{char data;stack*next;};

3. Operasi pada stack dan queueDalam penyajian stack dan queue, ada 2 proses yang terjadi, yaitu pemasukan data (PUSH) dan pengeluaran data (POP). Seperti yang sudah dijelaskan bahwa array itu memiliki jumlah maksimal, maka pada proses PUSH, perlu pengecekan apakah data yang di-PUSH di stack / queue melebihi jumlah maksimal array atau tidak.Contoh algoritma untuk proses PUSH (stack dan queue) adalah sebagai berikut :0. Masukkan inputan ( x )1. Jika variable cek ( c ) = nilai maksimal array ( max ), kerjakan langkah 2. Jika tidak, kerjakan langkah 3.2. cetak TUMPUKAN PENUH3. selama ( c ) kurang dari ( max ), maka c c + 1 dan data [c] xContoh algoritma untuk proses POP pada stack adalah sebagai berikut :0. Jika c = 0, maka kerjakan langkah 2. Jika tidak, lakukan langkah 3.1. cetak TUMPUKAN KOSONG2. c c-1

CONTOH Program stack yang mempunyai fungsi proses PUSH dan proses POP di dalamnya. ( stack dideklarasikan dengan array )

void main(){char A[10]; int dpn,blk; char cek;int z; dpn=0; blk=-1; do{clrscr();printf("1. Tambah antrian\n"); printf("2. Hapus antrian\n"); printf("3. Lihat antrian\n"); printf("4. Exit\n");printf("Silakan berikan pilihan anda : ");cek=getche();if (cek!='1' && cek!='2' && cek!='3' && cek!='4')printf("\n Anda salah mengetikan inputan!\n");else{

if(cek=='1'){if(blk==9){printf("\n Maaf antrian penuh\n");goto error1;}blk++;printf("\n Silakan masukan inputan:"); A[blk]=getche();}else if(cek=='2'){if(dpn>blk){printf("\n Maaf antrian Kosong\n");goto error1;}for(int v=0;vblk){printf("\n Maaf Antrian Kosong\n");goto error1;}

dpn);

}}error1: printf("\n\nAda %i antrian\n",(blk+1)-

for(z=0; zdata); baru->next=NULL; if(atas==NULL){atas=baru;bawah=baru;}else{

}}

baru->next=atas;atas=baru;

void pop(){if(atas!=NULL){if(atas==bawah){

}else{

}else{

} delete atas;atas=NULL;

hapus=atas; atas=atas->next; delete hapus;printf("tumpukan kosong\nTekan enter untuk melanjutkan...");getch();}}void show(){bantu=atas;while(bantu!=NULL){printf("| %c |\n",bantu->data);bantu=bantu->next;}printf("\ntekan enter untuk melanjutkan...\n");getch();}

void main(){clrscr(); int pil; do{clrscr();printf("program tumpukan\n"); printf("==================\n"); printf("1.push\n"); printf("2.pop\n"); printf("3.tampil\n"); printf("4.keluar\n");printf("Masukkan pilihan : ");scanf("%i",&pil);switch(pil){case 1: push(); break;

case 2: pop(); break;case 3: show(); break;}}while(pil!=4);}

SOAL LATIHAN1. Coba buat program queue dengan memakai struct seperti program di atas!

2. Legenda di Hanoi, tentang kisah pendeta Budha bersama murid-muridnya.: Bagaimana memindahkan seluruh piringan (64 piringan) tersebut ke sebuah tiang yang lain (dari A ke B); setiap kali hanya satu piringan yang boleh dipindahkan, tetapi tidak boleh ada piringan besar di atas piringan kecil. Ada tiang perantara C. Bagaimana memindahkan seluruh piringan (64 piringan) tersebut ke sebuah tiang yang lain (dari A ke B); setiap kali hanya satu piringan yang boleh dipindahkan, tetapi tidak boleh ada piringan besar di atas piringan kecil. Ada tiang perantara C. tuliskan program untuk memindahkan piringan tersebut :BAB VII TREE (Pohon)

Dalam ilmu komputer, tree adalah sebuah struktur data yang secara bentuk menyerupai sebuah pohon, yang terdiri dari serangkaian node (simpul) yang saling berhubungan. Node-node tersebut dihubungkan oleh sebuah vektor. Setiap node dapat memiliki 0 atau lebih node anak (child). Sebuah node yang memiliki node anak disebut node induk (parent). Sebuah node anak hanya memiliki satu node induk. Sesuai konvensi ilmu komputer, tree bertumbuh ke bawah, tidak seperti pohon di dunia nyata yang tumbuh ke atas. Dengan demikian node anak akan digambarkan berada di bawah node induknya.Node yang berada di pangkal tree disebut node root (akar), sedangkan node yang berada paling ujung pada piramida tree disebut node leaf (daun).

Binary Tree (Pohon Biner)Dalam mata kuliah struktur data, secara khusus akan dipelajari mengenai pohon biner. Pohon biner adalah sebuah tree yang pada masing-masing simpulnya hanya dapat memiliki maksimum 2 (dua) simpul anak. Tidak boleh lebih. Pada pohon biner, umumnya kedua node anak disebut dengan posisinya, yaitu kiri dan kanan.Beberapa istilah pada pohon biner:- Size (ukuran): jumlah total node yang terdapat pada pohon biner tersebut.- Depth (kedalaman): panjang jalur yang menghubungkan sebuah node sampai ke node anaknya yang paling ujung (leaf). Depth biasa juga disebut height.Full Binary Tree (Pohon Biner Penuh) adalah pohon biner yang setiap nodenya pasti memiliki 0 atau 2 node anak.Perfect Binary Tree (Pohon Biner Sempurna) adalah pohon biner yang semua nodeleafnya berada pada kedalaman yang sama dari node root. Juga disebut sebagaiComplete Binary Tree (Pohon Biner Lengkap)Almost Complete Binary Tree (Pohon Biner Hampir Lengkap) adalah pohon biner yang setiap nodenya dapat memiliki 0 node anak, atau memiliki kiri, atau jika memiliki kanan harus memiliki kiri. Tidak boleh memiliki kanan saja.3636

ImplementasiImplementasi dalam pemrograman, dalam pokok bahasan ini akan dibicarakan untuk pohon biner saja. Asumsi awal adalah data yang hendak dimasukkan ke dalam node, bertipe data integer.

1. Deklarasi TreeKarena tree tersusun oleh node-node, maka yang perlu kita deklarasikan adalah komponen node itu sendiri. Dalam contoh dibawah, akan kita namai Node. Sebelumnya perlu kita lihat bahwa untuk mewujudkan implementasi node ke dalam bahasa pemrograman, diperlukan sebuah struktur yang memiliki susunan berikut ini:

typedef struct Node{int data; Node *kiri; Node *kanan;};Variabel data digunakan untuk menyimpan nilai angka node tersebut, sedangkan kiri dan kanan, bertipe pointer, masing-masing mewakili vektor yang akan menunjuk ke node anak kiri dan kanan.

2. Inisialisasi TreeUntuk pertama kali, saat kita akan membuat sebuah pohon biner, asumsi awal adalah pohon itu belum bertumbuh, belum memiliki node sama sekali, sehingga masih kosong. Oleh karena itu perlu kita tambahkan kode berikut pada baris awal prosedur Main:Node *pohon;pohon = NULL;Kita mendeklarasikan sebuah pointer yang akan menunjuk ke akar pohon yang kita buat, dengan nama *pohon. Pointer ini ditujukan untuk menunjuk strukturbertipe Node, yang telah dibuat pada bagian 1. Karena pohon tersebut sama sekali belum memiliki node, maka pointer *pohon ditunjuk ke NULL.

3. Menambahkan Node Pada TreeKarena pohon yang kita buat merupakan sebuah pohon biner, maka untuk menambahkan sebuah node, secara otomatis penambahan tersebut mengikuti aturan penambahan node pada pohon biner:1. Jika pohon kosong, maka node baru ditempatkan sebagai akar pohon.2. Jika pohon tidak kosong, maka dimulai dari node akar, dilakukan proses pengecekan berikut:a. Jika nilai node baru lebih kecil dari nilai node yang sedang dicek, maka lihat ke kiri node tersebut. Jika kiri node tersebut kosong (belum memiliki kiri), maka node baru menjadi kiri node yang sedang dicek. Seandainya kiri node sudah terisi, lakukan kembali pengecekan a dan b terhadap node kiri tersebut. Pengecekan ini dilakukan seterusnya hingga node baru dapat ditempatkan.b. Jika nilai node baru lebih besar dari nilai node yang sedang dicek, maka lihat ke kanan node tersebut. Jika kanan node tersebut kosong (belum memiliki kanan), maka node baru menjadi kanan node yang sedang dicek. Seandainya kanan node sudah terisi, lakukan kembali pengecekan a dan b terhadap node kanan tersebut. Pengecekan ini dilakukan seterusnya hingga node baru dapat ditempatkan.Proses penambahan ini diimplementasikan secara rekursif pada prosedur berikutini:

void tambah(Node **root,int databaru){if((*root) == NULL){ Node *baru;baru = new Node;baru->data = databaru;baru->kiri = NULL; baru->kanan = NULL; (*root) = baru; (*root)->kiri = NULL;(*root)->kanan = NULL;}else if(databaru < (*root)->data)tambah(&(*root)->kiri,databaru);else if(databaru > (*root)->data)tambah(&(*root)->kanan,databaru);else if(databaru == (*root)->data)printf("Data sudah ada!");}Variabel **root menunjukkan node mana yang sedang dicek saat ini, untuk itu saat pemanggilan prosedur ini, variabel **root kita beri nilai pointer yang menunjuk ke node akar, yaitu pohon.tambah(&pohon,data);Untuk selengkapnya dapat dilihat pada bagian 5, kode program lengkap.4. Membaca dan Menampilkan Node Pada TreeUntuk membaca dan menampilkan seluruh node yang terdapat pada pohon biner, terdapat 3 macam cara, atau yang biasa disebut kunjungan (visit). Semua kunjungan diawali dengan mengunjungi akar pohon. Karena proses kunjungan ini memerlukan perulangan proses yang sama namun untuk depth yang berbeda, maka ketiganya diimplementasikan dengan prosedur rekursif.a. Kunjungan Pre-Order.Kunjungan pre-order dilakukan mulai dari akar pohon, dengan urutan:1. Cetak isi (data) node yang sedang dikunjungi2. Kunjungi kiri node tersebut,- Jika kiri bukan kosong (NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut.- Jika kiri kosong (NULL), lanjut ke langkah ketiga.3. Kunjungi kanan node tersebut,- Jika kanan bukan kosong (NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut.- Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskan proses yang sama untuk node yang dikunjungi sebelumnya.void preOrder(Node *root){if(root != NULL){printf("%d ",root->data); preOrder(root->kiri); preOrder(root->kanan);}}b. Kunjungan In-Order.1. Kunjungi kiri node tersebut,- Jika kiri bukan kosong (NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut.- Jika kiri kosong (NULL), lanjut ke langkah kedua.2. Cetak isi (data) node yang sedang dikunjungi3. Kunjungi kanan node tersebut,- Jika kanan bukan kosong (NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut.- Jika kanan kosong (NULL), proses untuk node ini selesai, tuntaskanproses yang sama untuk node yang dikunjungi sebelumnya.void inOrder(Node *root){if(root != NULL){ inOrder(root->kiri); printf("%d ",root->data); inOrder(root->kanan);}}c. Kunjungan Post-Order.1. Kunjungi kiri node tersebut,- Jika kiri bukan kosong (NULL) mulai lagi dari langkah pertama, terapkan untuk kiri tersebut.- Jika kiri kosong (NULL), lanjut ke langkah kedua.2. Kunjungi kanan node tersebut,- Jika kanan bukan kosong (NULL) mulai lagi dari langkah pertama, terapkan untuk kanan tersebut.- Jika kanan kosong (NULL), lanjut ke langkah ketiga.3. Cetak isi (data) node yang sedang dikunjungi. Proses untuk node ini selesai, tuntaskan proses yang sama untuk node yang dikunjungi sebelumnya.void postOrder(Node *root){if(root != NULL){ postOrder(root->kiri); postOrder(root->kanan); printf("%d ",root->data);}}Variabel **root pada setiap fungsi diatas menunjukkan node mana yang sedang dikunjungi saat ini, untuk itu saat pemanggilan, variabel **root kita beri nilai pointer yang menunjuk ke node akar, yaitu pohon.preOrder(pohon);inOrder(pohon);postOrder(pohon);Untuk selengkapnya dapat dilihat pada bagian 5, kode program lengkap.

5. Kode Program LengkapBerikut ini kode program keseluruhan, termasuk menu tampilan, di mana di dalamnya terdapat Deklarasi Tree, Inisialisasi Tree, Penambahan Node, dan Pembacaaan serta Menampilkan Node dengan 3 macam kunjungan. Kode ditulis dengan C++ 3.00.#include #include typedef struct Node{ int data; Node *kiri; Node *kanan;};void tambah(Node **root,int databaru){if((*root) == NULL){ Node *baru;baru = new Node;baru->data = databaru;baru->kiri = NULL; baru->kanan = NULL; (*root) = baru; (*root)->kiri = NULL;(*root)->kanan = NULL;printf("Data bertambah!");}else if(databaru < (*root)->data)tambah(&(*root)->kiri,databaru);else if(databaru > (*root)->data)tambah(&(*root)->kanan,databaru);else if(databaru == (*root)->data)printf("Data sudah ada!");}void preOrder(Node *root){if(root != NULL){printf("%d ",root->data); preOrder(root->kiri); preOrder(root->kanan);}}

void inOrder(Node *root){if(root != NULL){ inOrder(root->kiri); printf("%d ",root->data); inOrder(root->kanan);}}

void postOrder(Node *root){if(root != NULL){ postOrder(root->kiri); postOrder(root->kanan); printf("%d ",root->data);}}void main(){int pil,c;Node *pohon,*t; pohon = NULL; do{clrscr();int data; printf("MENU\n"); printf("1. Tambah\n");printf("2. Lihat pre-order\n"); printf("3. Lihat in-order\n"); printf("4. Lihat post-order\n"); printf("5. Exit\n");printf("Pilihan : "); scanf("%d",&pil);switch(pil){case 1: printf("Data baru : ");scanf("%d",&data);tambah(&pohon,data);break;case 2: if(pohon!=NULL) preOrder(pohon);else printf("Masih kosong!");break;case 3: if(pohon!=NULL) inOrder(pohon);else printf("Masih kosong!");break;case 4: if(pohon!=NULL) postOrder(pohon);else printf("Masih kosong!");break;}getch();}while(pil!=5);}LatihanBerikut ini beberapa latihan yang dapat dicoba, setelah selesai cocokkan jawaban anda dengan asisten praktikum.1. Buatlah prosedur/fungsi untuk menghitung jumlah node keseluruhan pada pohon biner. Penghitungan dilakukan dengan menjelajahi isi pohon, bukan dengan menambahkan counter saat setiap data baru dimasukkan!.2. Buatlah prosedur/fungsi untuk mencetak semua leaf (daun) yang ada pada pohonbiner.3. Buatlah prosedur/fungsi untuk mencetak nilai node minimum (terkecil) pada pohon biner.4. Tanpa mencobanya pada kompiler C++, analisislah untuk apa fungsi F di bawah ini:int F(Node *root){if (root == NULL) return -1;int u = F(root->kiri), v = F(root->kanan);if (u > v) return u+1;else return v+1;}5. Tanpa mencobanya pada kompiler C++, analisislah untuk apa fungsi G di bawah ini, dan nilai yang dikembalikan berupa apa?Node *G(Node *root){if(root == NULL)return NULL;else if(root->kanan == NULL)return root;else

} return G(root->kanan);Tes Kecil1) Buatlah fungsi untuk menghapus sebuah node tertentu. Inputnya adalah node yang ingin dihapus.2) Buatlah fungsi untuk mencari dan menampilkan node anak (kiri + kanan) dari sebuah node tertentu. Inputnya adalah node yang ingin ditampilkan anaknya. Untuk soal boleh memakai 1 fungsi atau lebih.3) Buatlah program untuk menampilkan node baru ke dalam pohon denganmenggunakan prosedur preorder, inorder, dan postorder. Sehingga akan didapatkan hasil :Tampilan secara PreOrder : R A S I T ETampilan secara InOrder : I S T A R E Tampilan secara PostOrder : I T S A E R Contoh ada di file : tree2.exeSave dengan nama file : tre_nim (4 digit nim terakhir)