Struktur Data Tree
-
Upload
junian-triajianto -
Category
Documents
-
view
780 -
download
0
description
Transcript of 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
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{
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
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];}
}
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.
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;
}
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);
}
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;
}