operasi-pada-pohon-biner(1)

download operasi-pada-pohon-biner(1)

of 20

Transcript of operasi-pada-pohon-biner(1)

Operasi pada pohon biner

Operasi pada pohon binerMerupakan suatu rangkaian proses (atau fungsi-fungsi) yang dapat dibagi menjadi.InsisialisasiPembuatan simpulPembuatan simpul akarPenambahan (insert) simpul baruPenghapusan (delete) seimpul Pembacaan/penelusuran pohon binerSebelum proses tersebut di atas dilaksanakan, pertama-tama deklarasi struktur simpul dan semua pinter yang diperlukan sbb:

Pointer Root khusus untuk simpul akarPointer P untuk simpul yang baru dibuatPointer Q dan R sebagai pointer bantu

Merupakan pemberian nilai awal pada suatu variabel atau kondisi yang dapat digunakan sebagai ciri suatu kondisiRoot = NULL;P = NULL;

Fungsi ini dilaksanakan sebelum fungsi yg lain.Pointer Root pada awalnya isinya sudah ada tetapi nilai tidak diketahui.Root = Null menjadi tanda pohon sudah ada atau belum

Proses inisialisasi

Jika pembuatan simpul gagal maka pointer P akan bernilai Null, Pembuatan Simpul Gagal

Pembuatan Simpul

Sebelum membuat pohon pertama kali (simpul akar), periksa apakah pohon sudah ada (Root = Null)Bila sudah ada tidak perlu membuat simpul akar baru (pohon baru)Bila belum ada, periksa apakah simpul yang akan dibuat merupakan simpul akar (P != Null)Membuat simpul Akar

Membuat simpul Akar

Insert simpul ke dalam sebuah pohon menambahkan simpul baru tersebut menjadi subordinat sebuah simpul baik kiri maupun kanan.Terdapat dua cara:Insert urut nomor simpul, atau insert lever per levelInsert pada nomor simpul tertentuInsert simpulInsert urut nomor simpul, level per level

- Inser simpul sbg subordinat kanan: Root -> right = P- Inser simpul sbg subordinat kiri: Root -> left = P

Diperlukan sebuah array bertipe pointerArray Q [n] digunakan sebagai tempat antrian

Contoh.struct Node{struct Node *Left; char INFO; struct Node *Right;};typedef struct Node Simpul;Simpul *P, *Root, *Current;Simpul *Q[30];void Inisialisasi(){ Root = NULL; P = NULL; }Contoh.void BuatSimpul (char x){P=(Simpul*) malloc(sizeof(Simpul)); if (P != NULL) { P->INFO = x; P->Left = NULL; P->Right = NULL; } else { printf ("Memory Heap Full"); exit (1); }}Contoh.void BuatSimpulAkar(){if (Root == NULL) { if(P != NULL) { Root = P; Root->Left = NULL; Root->Right = NULL; } else printf("\n Simpul Belum Dibuat"); } else printf ("Pohon Sudah Ada");}Contoh.void InsertUrutNomor(){int i, j, Flag; char x; Flag = 0; i=1; j=1; Q[i] = Root; while (Flag == 0 && j < 30) { x = getche (); if (x != '0') { BuatSimpul (x); Current = Q[i]; Current ->Left = P; j++; Q[j] = P; } else { // data habis Flag = 1; j++; Q[j] = NULL; } if (Flag == 0) { x = getche(); if (x != '0') { BuatSimpul (x); //Current = Q[i]; Current ->Right = P; j++; Q[j] = P; } else { // data habis Flag = 1; j++; Q[j] = NULL; } } i++; } }Contoh.void BacaUrutNomor(){ int i, j, n, Counter; char x; i=1; j=1; n=1; Counter =0; printf ("\n"); while (Q[i] != NULL) { Current = Q[i]; printf ("%c ", Current -> INFO); Counter ++; if (Counter == n) { printf ("\n"); Counter = 0; n = n*2; } i++; }}Contoh.int main(){int i, j, Flag; char x; clrscr(); Inisialisasi(); x = getche(); BuatSimpul (x); BuatSimpulAkar(); InsertUrutNomor (); BacaUrutNomor ();}Contoh.