Struktur Data Tree

11
STRUKTUR DATA TUGAS KE-5 TREE Tanggal 6 Mei 2009 Oleh: Junian Triajianto (5108100038) JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNOLOGI INFORMASI INSTITUT TEKNOLOGI SEPULUH NOPEMBER

description

Penjelasan singkat struktur data tree

Transcript of Struktur Data Tree

Page 1: Struktur Data Tree

STRUKTUR DATA

TUGAS KE-5

TREE

Tanggal 6 Mei 2009

Oleh:

Junian Triajianto (5108100038)

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNOLOGI INFORMASI

INSTITUT TEKNOLOGI SEPULUH NOPEMBER

2009

Page 2: Struktur Data Tree

5.4 Representing Lists as Binary Trees

Sebuah linked list dapat direpresentasikan melalui sebuah tree. Data-data link list

merupakan leaf dari sebuah tree. Sedangkan non-leaf dari tree berisi angka-angka yang

akan menunjukkan letak dari node link list ke-n. Linked list yang direpresentasikan ke

dalam Tree memiliki banyak keunggulan, salah satu di antaranya adalah dalam pencarian

elemen ke-k.

Finding the kth Element

Setelah membuat tree dari sebuah linked list, untuk mencari node ke-k dari linked

list, dilakukan traverse tree melaui root sampai ketemu leaf. Proses traverse dimulai dari

root, kemudian dibandingkan nilai k dengan node yang sedang dikunjungi, jika lebih

kecil atau sama dengan maka proses traverse dilanjutkan ke anak kiri, sedangkan jika

lebih besar proses traverse akan dilanjutkan ke anak kanan dan nilai k dikurangi dengan

angka yang ada di node yang sedang dikunjungi tersebut.

Untuk mencari element pada index ke-k, digunakan algoritma sebagai berikut:

Mula-mula pointer menunjuk root

Selama belum mencapai leaf.

o Apabila index yang dicari kurang dari atau sama dengan nomor index yang

disimpan dalam node tree, maka pointer bergerak ke kiri

o Apabila index yang dicari lebih dari nomor index yang disimpan dalam

node tree, index dikurangi dengan nomor yang disimpan dalam node,

kemudian pointer bergerak ke kanan.

Ulangi hingga mencapai leaf

Code dalam java:

public TreeNode seacrh(int index){if(root == null)

return null;

TreeNode pointer = root;

while(pointer.left != null || pointer.right != null){if(index <= pointer.data){

pointer = pointer.left;}else{

Page 3: Struktur Data Tree

index -= pointer.data;pointer = pointer.right;

}}

return pointer;}

Deleting an element

Dalam penghapusan sebuah node dalam tree, terdapat 3 kondisi yang berbeda:

a. Node adalah sebuah leaf

Mula-mula cari data yang akan dihapus. Jika node yang dihapus adalah sebuah

leaf, maka node tersebut langsung di-null-kan. Tidak perlu ada pengganti untuk

node tersebut.

b. Node memiliki satu child

Mula-mula cari data yang akan dihapus. Kemudian cek apakah node tersebut

hanya memiliki satu child. Kemudian hapus node tersebut dan jadikan child-nya

sebagai pengganti tempat node yang dihapus tadi.

c. Node memiliki dua child

Untuk menghapus elemen yang memiliki 2 buah child, ganti node dengan inorder

dari successor.

Cara menemukan successor: Pertama program bertuju ke anak kanan asli, yang

harus memiliki sebuah angka yang lebih besar dari node itu. Selanjutnya mertuju

Page 4: Struktur Data Tree

kekanan dari anak node tersebut, dan mertuju kekanan dari kananya anak node

tersebut, dan begitu seterusnya, ikuti terus jalan dari anak kanan. Anak kiri

terakhir dari jalan ini disebut successor dari node asli.

Implementing Tree-Represented List in Java

Membangun sebuah tree hampir sama dengan membuat sebuah list. Namun kelas

tree memiliki anak kiri dan kanan yang wujudnya hampir menyerupai node next dan prev

dalam bentuk list. Jika dalam list yang diperlukan adalah next dan isi. Maka pada tree

dapat terdiri dari node father, left dan right.

Berikut adalah kelas node dan kelas tree yang menerapkan prinsip yang hampir

sama dengan list.

public class TreeListNode {private String info;private int lcount;private Boolean used;

}

public class TreeList {public static final int MAXELTS = 100; //maksimum jumlah

untuk elemen dalam listpublic static final in NUMNODES = 2*MAXELTS – 1;public static final String BLANKS = “

“ //20 kosongprivate TreeListNode node[] = new TreeListNode[MAXELTS];

public TreeList() {for(int i =0 ; I <MAXELTS ; i++)

node[i] = new TreeListNode(); }

public TreeListNode getTreeListNode(int n){

return node[n];}

}

Page 5: Struktur Data Tree

Constructing a Tree-Represented List

Pada masalah ini akan dibahas lagi bahwa jika diberikan sebuah list dengan n

elemen, maka memungkinkan untuk membuat atau membangun sebuah almost complete

binary tree dengan list sebuah almost complete binary tree dapat dibangun dari n daun

dan 2*n -1 node. Dengan level d, maka jumlah simpul daun adalah 2d dan jumlah simpul

bukan daun adalah 2d – 1.

Implementasi untuk membangun Tree dalam java:

public void buildtree() {int d, f, I, p, power, size;

d=0;power = 1;

while(power < n){

d++;power *=2;

}

size = 2*n-1;}

The Josephus Problem Revisited

Terdapat orang sejumlah n berdiri membentuk formasi lingkaran. Akan dilakukan

hitungan sebanyak m. Salah satu orang yang tepat mengucapkan hitungan ke-m

melakukan bunuh diri, selanjutnya orang yang bunuh diri berikutnya adalah orang yang

berdiri sejauh m orang dari yang sebelumnya bunuh diri, begitu seterusnya hingga tersisa

satu orang saja.

Page 6: Struktur Data Tree

5.5 Trees and their Applications

Tree adalah salah satu bentuk stryktur data yang terdiri dari akar dan simpul-

simpul yang berada dibawah akar. Setiap elemen dalam tree disebut node. Setiap node

bisa jadi merupakan akar yang memiliki beberapa subtree atau tidak sama sekali. Sebuah

node tanpa subtree disebut sebagai leaf (daun). Anak pertama dalam tree disebut anak

tertua, dana anak terakhir adalah anak termuda.

Java Representations of Trees

Cara membentuk tree dalam java ada dua cara, yaitu dengan menggunakan array

tree yang telah dideklarasi terlebih dahulu atau menggunakan variable dinamis atau linear

list. Dalam representasi dari binary tree, setiap node memiliki sebuah information field

(isi atau info atau data) dan duah pointer yang menunjuk ke anak kiri dan atau anak

kanan.

Jika menggunakan bentuk array :

public class TreeNode() {public static int MAXSONS = 20;public Object info;public TreeNode father;public TreeNode [] sons;

public TreeNode() {sons = new TreeNode();

}}

Penggunaan array sangatlah tidak efektif. Misalkan saja node yang terpakai hanya dua,

tetapi node yang disediakan ada 100. Pemborosan memori tersebutlah yang sangat

disayangkan jika menggunakan array. Agar lebih efektif, lebih baik digunakan linear list.

Jika menggunakan list:

class TreeNode() {

public Object info;

public TreeNode father;

public TreeNode son;

public TreeNode next;

}

Page 7: Struktur Data Tree

Tree Traversals

Tree Traversal adalah proses menelusuri satu persatu elemen-elemen data pada struktur.

Penelusuran ini tentunya disertai suatu proses tertentu pada node yang didatangi misalnya

pencetakan, pencarian, komputasi, atau lain sebagainya. Proses-proses apa pun itu secara

umum dapat kita sebut proses kunjungan.

Dalam Tree traversal, ada 3 macam metode, yaitu inorder, preorder, dan postorder.

Berikut adalah keterangan masing-masing penelusuran tersebut:

a. Inorder

Mula-mula root dari tree dikunjungi.

Jika di kiri masih ada node, maka berkunjung ke kiri.

Ambil data pada node.

Jika di kanan masih ada node, maka berkunjung ke kanan.

Code dalam java:

private String inOrder(Node subRoot){

String result = "";

if(subRoot!=null){

result += inOrder(subRoot.kiri);

result += subRoot.data + " ";

result += inOrder(subRoot.kanan);

}

return result;

}

b. Preorder

Mula-mula root dari tree dikunjungi.

Ambil data pada node.

Jika di kiri masih ada node, maka berkunjung ke kiri.

Jika di kanan masih ada node, maka berkunjung ke kanan.

Code dalam java:

private String preOrder(Node subRoot){

String result = "";

if(subRoot!=null){

result += subRoot.data + " ";

result += preOrder(subRoot.kiri);

result += preOrder(subRoot.kanan);

Page 8: Struktur Data Tree

}

return result;

}

c. Postorder

Mula-mula root dari tree dikunjungi.

Jika di kiri masih ada node, maka berkunjung ke kiri.

Jika di kanan masih ada node, maka berkunjung ke kanan.

Ambil data pada node.

Code dalam java:

private String postOrder(Node subRoot){

String result = "";

if(subRoot!=null){

result += postOrder(subRoot.kiri);

result += postOrder(subRoot.kanan);

result += subRoot.data + " ";

}

return result;

}