SlideShare a Scribd company logo
Suryana Setiawan, Ruli Manurung & Ade Azurat
(acknowledgments: Denny)‫‏‬
1
Fasilkom UI
SUR – HMM – AA Fasilkom UI - IKI20100/IKI80110P
Struktur Data & Algoritma
2009/2010 Ganjil – Pekan 08
ADT Tree
2SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Tujuan
 Memahami definisi dan terminologi
mengenai tree secara umum.
 Mengenali aplikasi tree.
 Mengetahui cara melakukan operasi untuk
tiap-tiap element pada tree (tree traversal)‫‏‬
3SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Outline
 Tree
 Contoh
 terminologi/definisi
 Binary tree
 Traversal of trees
 Iterator
4SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Contoh
 Sebuah tree merepresentasikan sebuah
hirarki
 Mis.: Struktur organisasi sebuah perusahaan
5SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Contoh
 Daftar isi sebuah buku
6SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Contoh
 File system
7SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Istilah-istilah umum:
 A is the root node
 B is the parent of D and E
 C is the sibling of B
 D and E are the children of B
 D, E, F, G, I are external nodes, or
leaves
 A, B, C, H are internal nodes
 The depth/level/path length of E
is 2
 The height of the tree is 3
 The degree of node B is 2
 B,D,E adalah subtree
Property:
(# edges) = (#nodes) - 1
8SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Tree dilihat secara Rekursif
Setiap sub-tree adalah juga sebuah tree!
9SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Representasi Tree
• Mungkinkah setiap node bisa memiliki link
ke setiap anaknya?
– Bisa tetapi karena jumlah anak sangat bervariasi
menjadikan link langsung tidak feasible, jika
dipaksakan akan terjadi pemborosan ruang tak
terpakai.
• Solusi metoda “first child/next sibling”.
– Setiap node dengan dua pointer: kiri dan kanan.
– Anak-anak dari suatu node (relasi sibling)
dirangkai dalam linked-list dari anak terkiri ke
terkanan dengan pointer kanan.
– Anak terkiri dari setiap node dirangkai dengan
pointer kiri.
10SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
A
B C D E
F G H I J
K
A
B C D E
F G H I J
K
A
B
C
D
E
F
G
H
I
J
K
Suatu Binary Tree
Suatu General Tree
General Tree
w/ representasi.
First child/next sibling
Representasi “first child/next sibling”
11SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Binary Tree
 Binary tree: tree di mana setiap nodes
memiliki maksimum degree 2
 Full Binary tree: binary tree di mana setiap
nodes memiliki degree 0 atau 2
 Perfect Binary tree: binary tree di mana
setiap nodes memiliki degree 0 atau 2 dan
setiap leaf berada pada level terbawah
12SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Binary Tree
• Complete Binary tree: binary tree dengan tinggi k
adalah binary tree yang miliki jumlah maximum
nodes di levels 0 sampai k – 1, dan pada level k
seluruh node mampat ke kiri.
• Jadi suatu perfect binary tree adalah juga
complete binary tree
13SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Contoh Binary Tree
 Representasi ekspresi arithmatik (expression
tree)
14SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Ketentuan mengenai Full Binary Tree
 (# external nodes ) = (# internal
nodes) + 1
 (# nodes at level i) ≤ 2i
 (# external nodes) ≤ 2(height)‫‏‬
 (height)  log2 (# external nodes)‫‏‬
 (height)  log2 (# nodes) - 1
 (height) ≤ (# internal nodes) = ((#
nodes) - 1)/2
 Jika tinggi = k,
maka #node = 2k+1 - 1
15SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
BinaryNode dalam Java
 Tree adalah sekumpulan nodes yang
dideklarasikan secara rekursif.
class BinaryNode<A>
{
A element;
BinaryNode<A> left;
BinaryNode<A> right;
}
16SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
ADT Tree dalam Java
 ADT tree menyimpan referensi dari root node,
yang merupakan awal untuk mengakses tree.
public class BinaryTree<A>
{
private BinaryNode<A> root;
public BinaryTree( )‫‏‬
{
root = null;
}
}
17SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Berfikir Rekursif
 Menghitung tinggi tree dapat menjadi
program yang rumit bila tidak menerapkan
rekursif.
 Tinggi sebuah tree adalah: maksimum tinggi
dari subtree ditambahkan satu (tinggi dari
root).
 HT = max (HL+1, HR+1)‫‏‬
HL
HR
HL+1
HR+1
18SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Menghitung tinggi tree
 Antisipasi base case (empty tree)‫‏‬.
 Catatan: Tree dengan hanya satu node memiliki
tinggi = 0.
 Terapkan perhitungan/analisa sebelumnya
dalam bentuk program.
public static int height (BinaryNode<A> t)‫‏‬
{
if (t == null) {
return -1;
} else {
return max(height (t.left) + 1,
height (t.right) + 1);
}
}
19SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Algoritma pada Binary Tree
 Struktur data tree di definisikan / dilihat
secara rekursif:
 sebuah binary tree adalah tree kosong atau terdiri
dari sebuah node dengan dua buah sub tree (kiri
dan kanan) yang masing-masing adalah tree juga.
 Algoritma untuk Binary Tree akan lebih
mudah dinyatakan secara rekursif.
 Binary tree memiliki dua kasus rekursif
 Base case: empty – leaf – external node.
 Recursive case: Sebuah internal node (root) and
dua binary trees (subtree kiri dan subtree kanan)‫‏‬
 Traversing Tree:
“Menjalani/mengunjungi” tree.‫‏‬
20SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Traversing Trees: Preorder traversal
 Contoh: reading a document from beginning
to end
Algorithm preOrder(v)‫‏‬
“visit”‫‏‬node‫‏‬v
preOrder(leftChild(v))‫‏‬;
preOrder(rightChild(v))‫‏‬;
21SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Print Pre-Order
class BinaryNode<A> {
void printPreOrder()‫‏‬{
System.out.println( element ); // Node
if( left != null )‫‏‬
left.printPreOrder( ); // Left
if( right != null )‫‏‬
right.printPreOrder( ); // Right
}
}
class BinaryTree<A> {
public void printPreOrder(){
if( root != null )‫‏‬
root.printPreOrder( );
}
}
22SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Traversing Trees: Postorder traversal
Contoh: du (disk usage) command in Unix
Algorithm postOrder(v)‫‏‬
postOrder(leftChild(v))‫‏‬;
postOrder(rightChild(v))‫‏‬;
“visit” node v
23SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Print Post-Order
class BinaryNode<A> {
void printPostOrder( )‫‏‬
{
if( left != null )‫‏‬
left.printPostOrder( ); // Left
if( right != null )‫‏‬
right.printPostOrder( ); // Right
System.out.println( element ); // Node
}
}
class BinaryTree<A> {
public void printPostOrder( )‫‏‬
{
if( root != null )‫‏‬
root.printPostOrder( );
}
}
24SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Traversing Trees: Inorder traversal
Algorithm inOrder(v)‫‏‬
inOrder(leftChild(v))‫‏‬
“visit”‫‏‬node‫‏‬v
inOrder(rightChild(v))‫‏‬
25SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Traversing tree: Inorder Traversal
 Contoh: Urutan penulisan ekspresi aritmatika
 Mencetak sebuah expressi aritmatika.
 print “(“ before traversing the left subtree
 print “)” after traversing the right subtree
26SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Catatan Mengenai Inorder Traversal
 Inorder traversal menghasilkan vertical
projection.
27SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Print InOrder
class BinaryNode<A> {
void printInOrder( )‫‏‬
{
if( left != null )‫‏‬
left.printInOrder( ); // Left
System.out.println( element ); // Node
if( right != null )‫‏‬
right.printInOrder( ); // Right
}
}
class BinaryTree<A> {
public void printInOrder( )‫‏‬
{
if( root != null )‫‏‬
root.printInOrder( );
}
}
28SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Traversing Tree
Pre-Order Post-Order InOrder
29SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Latihan: Traversing Trees
 Algoritma traversing mana yang sesuai
untuk melakukan operasi perhitungan nilai
expressi aritmatika yang direpresentasikan
menggunakan binary tree?
30SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Jawaban: postorder traversal
 Algorithm evaluateExpression(v)‫‏‬
if v is an external node
return nilai bilangan pada v
else
x = evaluateExpression(leftChild(v))‫‏‬
y = evaluateExpression(rightChild(v))‫‏‬
// Misalkan o adalah operator pada v
return x o y
31SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Running Time
 Strategy yang digunakan adalah postorder
traversal: information dari node dihitung
setelah informasi dari seluruh children
dihitung.
 Postorder traversal running time adalah N
(jumlah elemen dalam tree) dikalikan beban
waktu untuk memproses tiap node.
 Running time -nya linear karena tiap node
hanya diproses sekali dengan beban waktu
konstan.
32SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Latihan
 Asumsi: Sebuah binary tree (seluruh internal
node memiliki degree 2) dengan elemen
bilangan bulat.
 Buat algoritma yang melakukan:
 Pencarian bilangan paling besar.
 Penghitungan total bilangan dalam tree.
33SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Kesulitan dengan rekursif
 Terkadang, kita ingin memroses semua node
tanpa peduli urutan.
 Agar mudah, kita mau looping sederhana 
Iterator
 Bagaimana caranya implementasi secara
rekursif?
 Bayangkan saat current node yang sedang diakses
adalah sebuah internal node. Bagaimana
menentukan node mana yang akan diakses
selanjutnya?
 Pada fungsi rekursif, informasi ini implisit pada
call stack.
 Bagaimana menghindari rekursif?
 Bagaimana mengimplementasikan traversal
yang tidak rekursif?
34SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Rekursif vs. Loop
 Fungsi rekursif dieksekusi Java menggunakan
stack.
 Kita dapat melakukan traversal non-rekursif dengan
membuat stack sendiri.
 Dengan kata lain, meng-emulasikan: stack of
activation records.
 Apakah mungkin non-rekursif lebih cepat dari
rekursif?
 Ya
 Mengapa?
 Kita dapat menyimpan hanya informasi yang penting
saja dalam stack, sementara compiler menyimpan
seluruh activation record.
 Namun demikian efisiensi yang dihasilkan tidak akan
terlalu besar apalagi dengan teknologi optimisasi
compiler yang semakin maju.
35SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Tree Iterator: implementation
 Tree iterator dan traversal-nya
diimplementasikan secara non-rekursif
menggunakan stack.
 Lihat code di:
https://telaga.cs.ui.ac.id/WebKuliah/IKI20
100/resources/weiss.code/TestTreeIterators
.java
36SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Post-Order Traversal dengan Stack
 Gunakan stack untuk menyimpan status
terakhir. (node yang sudah dikunjungi tapi
belum selesai diproses)‫‏‬
 sama dengan PC (program counter) dalam
activation record
 Apa saja status pada post-order traversal?
0. akan melakukan rekursif pada subtree kiri
1. akan melakukan rekursif pada subtree
kanan
37SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Post-Order Algorithm/Pseudocode
 init: push the root kedalam stack dengan
status 0
 advance:
while (not stack.empty())‫‏‬
node X = pop from the stack
switch (state X):
case 0:
push node X with state 1;
push left child node X (if it exists) w/ state 0;
break;
case 1:
push node X with state 2;
push right child node X (if it exists) w/ state 0;
break;
case 2:
“visit”/”set current to” the node X; return;
38SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Post-Order traversal: stack states
39SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
In-Order Traversal using Stack
 Apa saja status pada in-order traversal?
0. akan melakukan rekursif pada subtree kiri
1. akan memproses node yang dikunjungi
2. akan melakukan rekursif pada subtree
kanan
40SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
In-Order Algorithm/Pseudocode
 init: push the root into the stack with state 0
 advance:
while (not stack.empty())‫‏‬
node X = pop from the stack
switch (state X):
case 0:
push node X with state 1;
push left child node X (if it exists) w/ state 0;
break;
case 1:
push node X with state 2;
“visit”/”set current to” the node X; return;
case 2:
push right child node X (if it exists) w/ state 0;
break;
41SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
In-Order Algorithm/Pseudocode
 init: push the root into the stack with state 0
 advance (optimize):
while (not stack.empty())‫‏‬
node X = pop from the stack
switch (state X):
case 0:
push node X with state 1;
push left child node X (if it exists) w/ state 0;
break;
case 1:
“visit”/”set current to” the node X;
push right child node X (if it exists) w/ state 0;
return;
42SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Pre-Order Traversal using Stack
 Apa saja status pada pre-order traversal?
0. akan memproses node yang dikunjungi
1. akan melakukan rekursif pada subtree kiri
2. akan melakukan rekursif pada subtree kanan
43SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Pre-Order Algorithm/Pseudocode
 init: push the root into the stack with state 0
 advance:
while (not stack.empty())‫‏‬
node X = pop from the stack
switch (state X):
case 0:
“visit”/”set current to” the node X;
push node X with state 1;
break;
case 1:
push right child node X (if it exists) w/ state 0;
push node X with state 2;
break;
case 2:
push left child node X (if it exists) w/ state 0;
break;
44SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Pre-Order Algorithm/Pseudocode
 init: push the root into the stack
 advance (optimized):
while (not stack.empty())‫‏‬
node X = pop from the stack
“visit”/”set current to” the node X;
push right child node X (if it exists);
push left child node X (if it exists);
return;
45SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Latihan
 Buat algorithm/psedo-code dengan in-order
traversal menggunakan stack.
 Buat algorithm/psedo-code dengan pre-
order traversal menggunakan stack.
46SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Euler Tour Traversal
 generic traversal pada binary tree
 Strategi traversal preorder, inorder, dan postorder adalah
kasus khusus dari Euler tour traversal
 “walk around” the tree dan kunjungi tiap node tiga kali:
 dari arah parent.
 dari sub tree kiri
 dari sub tree kanan
47SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Level-order Traversal
 Kunjungi root diikuti oleh seluruh node pada
sub tree dari kiri ke kanan kemudian diikuti
oleh node pada sub tree-nya lagi.
 Tree dikunjungi berdasarkan level.
 Pada tree dibawah urutan kunjungan adalah:
A - B - C - D - E - F - G - H - I
48SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Level-order Traversal: idea
 Gunakan queue bukan stack
 Algorithm (mirip dengan pre-order)‫‏‬
 init: enqueue the root into the queue
 advance:
node X = dequeue from the queue
“visit”/”set current to” the node X;
enqueue left child node X (if it exists);
enqueue right child node X (if it exists);
49SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Latihan
 Buat program untuk mencetak isi dari
sebuah binary tree secara level order
 Implementasikan menggunakan queue
 Dapatkan anda membuat implementasi yang
lebih mudah / sederhana?
 Hint: Coba pikirkan representasi binary tree yang
lain, sehingga implementasi level order dapat
menjadi lebih sederhana.
50SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Representasi binary tree dengan array
 Complete binary tree dengan n nodes dapat
diresentasikan menggunakan array dengan
index dari 1..n
 .
 Untuk setiap node dengan index i, maka:
 Parent (i) terletak pada index i/2 if i 1; for i =1,
tidak ada parent.
 Left-child (i) terletak pada 2i if 2i  n.
(else tidak ada left-child)‫‏‬
 Right-child (i) terletak pada 2i+1 if 2i +1  n
51SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Latihan
 Pada ADT tree yang berisikan elemen
bilangan bulat. Hitung elemen paling kecil
pada leaves dan update seluruh leaves pada
tree tersebut dengan elemen terkecil
tersebut. (Repmin problem)
 Tantangan: Apakah algoritma anda dapat
melakukannya dengan satu kali traversal?
Input Output

More Related Content

Viewers also liked

ιστοσελίδες για Bloggers ver2
ιστοσελίδες για Bloggers ver2ιστοσελίδες για Bloggers ver2
ιστοσελίδες για Bloggers ver2lianamalakoydi
 
ใบงานที่ 16 ปฏิทินการปฏิบัติงาน
ใบงานที่ 16 ปฏิทินการปฏิบัติงานใบงานที่ 16 ปฏิทินการปฏิบัติงาน
ใบงานที่ 16 ปฏิทินการปฏิบัติงานfangnoii
 
ใบงานที่ 9 ปัญหาและความจำเป็นในการทำงาน
ใบงานที่ 9 ปัญหาและความจำเป็นในการทำงานใบงานที่ 9 ปัญหาและความจำเป็นในการทำงาน
ใบงานที่ 9 ปัญหาและความจำเป็นในการทำงานfangnoii
 
Gurgaon Property BPTP Amstoria Sector 102
Gurgaon Property BPTP Amstoria Sector 102Gurgaon Property BPTP Amstoria Sector 102
Gurgaon Property BPTP Amstoria Sector 102
connexionsabroad2013
 
ใบงานที่ 5 เรื่องโครงงานประเภท “การพัฒนาเครื่องมือ”
ใบงานที่ 5 เรื่องโครงงานประเภท “การพัฒนาเครื่องมือ”ใบงานที่ 5 เรื่องโครงงานประเภท “การพัฒนาเครื่องมือ”
ใบงานที่ 5 เรื่องโครงงานประเภท “การพัฒนาเครื่องมือ”fangnoii
 
7 สามัญ ภาษาไทย
7 สามัญ ภาษาไทย7 สามัญ ภาษาไทย
7 สามัญ ภาษาไทยfangnoii
 
παρουσίαση1καραβι
παρουσίαση1καραβιπαρουσίαση1καραβι
παρουσίαση1καραβιfotistselios
 
7 สามัญ อังกฤษ
7 สามัญ อังกฤษ7 สามัญ อังกฤษ
7 สามัญ อังกฤษfangnoii
 
Aviacijos knygos Lietuvos technikos bibliotekoje
Aviacijos knygos Lietuvos technikos bibliotekojeAviacijos knygos Lietuvos technikos bibliotekoje
Aviacijos knygos Lietuvos technikos bibliotekoje
Lietuvos technikos biblioteka
 
ฟิสิกส์ 7 วิชาสามัญ โดย ideal physics
ฟิสิกส์ 7 วิชาสามัญ โดย ideal physicsฟิสิกส์ 7 วิชาสามัญ โดย ideal physics
ฟิสิกส์ 7 วิชาสามัญ โดย ideal physicsfangnoii
 

Viewers also liked (10)

ιστοσελίδες για Bloggers ver2
ιστοσελίδες για Bloggers ver2ιστοσελίδες για Bloggers ver2
ιστοσελίδες για Bloggers ver2
 
ใบงานที่ 16 ปฏิทินการปฏิบัติงาน
ใบงานที่ 16 ปฏิทินการปฏิบัติงานใบงานที่ 16 ปฏิทินการปฏิบัติงาน
ใบงานที่ 16 ปฏิทินการปฏิบัติงาน
 
ใบงานที่ 9 ปัญหาและความจำเป็นในการทำงาน
ใบงานที่ 9 ปัญหาและความจำเป็นในการทำงานใบงานที่ 9 ปัญหาและความจำเป็นในการทำงาน
ใบงานที่ 9 ปัญหาและความจำเป็นในการทำงาน
 
Gurgaon Property BPTP Amstoria Sector 102
Gurgaon Property BPTP Amstoria Sector 102Gurgaon Property BPTP Amstoria Sector 102
Gurgaon Property BPTP Amstoria Sector 102
 
ใบงานที่ 5 เรื่องโครงงานประเภท “การพัฒนาเครื่องมือ”
ใบงานที่ 5 เรื่องโครงงานประเภท “การพัฒนาเครื่องมือ”ใบงานที่ 5 เรื่องโครงงานประเภท “การพัฒนาเครื่องมือ”
ใบงานที่ 5 เรื่องโครงงานประเภท “การพัฒนาเครื่องมือ”
 
7 สามัญ ภาษาไทย
7 สามัญ ภาษาไทย7 สามัญ ภาษาไทย
7 สามัญ ภาษาไทย
 
παρουσίαση1καραβι
παρουσίαση1καραβιπαρουσίαση1καραβι
παρουσίαση1καραβι
 
7 สามัญ อังกฤษ
7 สามัญ อังกฤษ7 สามัญ อังกฤษ
7 สามัญ อังกฤษ
 
Aviacijos knygos Lietuvos technikos bibliotekoje
Aviacijos knygos Lietuvos technikos bibliotekojeAviacijos knygos Lietuvos technikos bibliotekoje
Aviacijos knygos Lietuvos technikos bibliotekoje
 
ฟิสิกส์ 7 วิชาสามัญ โดย ideal physics
ฟิสิกส์ 7 วิชาสามัญ โดย ideal physicsฟิสิกส์ 7 วิชาสามัญ โดย ideal physics
ฟิสิกส์ 7 วิชาสามัญ โดย ideal physics
 

10 tree

  • 1. Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny)‫‏‬ 1 Fasilkom UI SUR – HMM – AA Fasilkom UI - IKI20100/IKI80110P Struktur Data & Algoritma 2009/2010 Ganjil – Pekan 08 ADT Tree
  • 2. 2SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Tujuan  Memahami definisi dan terminologi mengenai tree secara umum.  Mengenali aplikasi tree.  Mengetahui cara melakukan operasi untuk tiap-tiap element pada tree (tree traversal)‫‏‬
  • 3. 3SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Outline  Tree  Contoh  terminologi/definisi  Binary tree  Traversal of trees  Iterator
  • 4. 4SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Contoh  Sebuah tree merepresentasikan sebuah hirarki  Mis.: Struktur organisasi sebuah perusahaan
  • 5. 5SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Contoh  Daftar isi sebuah buku
  • 6. 6SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Contoh  File system
  • 7. 7SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Istilah-istilah umum:  A is the root node  B is the parent of D and E  C is the sibling of B  D and E are the children of B  D, E, F, G, I are external nodes, or leaves  A, B, C, H are internal nodes  The depth/level/path length of E is 2  The height of the tree is 3  The degree of node B is 2  B,D,E adalah subtree Property: (# edges) = (#nodes) - 1
  • 8. 8SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Tree dilihat secara Rekursif Setiap sub-tree adalah juga sebuah tree!
  • 9. 9SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Representasi Tree • Mungkinkah setiap node bisa memiliki link ke setiap anaknya? – Bisa tetapi karena jumlah anak sangat bervariasi menjadikan link langsung tidak feasible, jika dipaksakan akan terjadi pemborosan ruang tak terpakai. • Solusi metoda “first child/next sibling”. – Setiap node dengan dua pointer: kiri dan kanan. – Anak-anak dari suatu node (relasi sibling) dirangkai dalam linked-list dari anak terkiri ke terkanan dengan pointer kanan. – Anak terkiri dari setiap node dirangkai dengan pointer kiri.
  • 10. 10SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 A B C D E F G H I J K A B C D E F G H I J K A B C D E F G H I J K Suatu Binary Tree Suatu General Tree General Tree w/ representasi. First child/next sibling Representasi “first child/next sibling”
  • 11. 11SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Binary Tree  Binary tree: tree di mana setiap nodes memiliki maksimum degree 2  Full Binary tree: binary tree di mana setiap nodes memiliki degree 0 atau 2  Perfect Binary tree: binary tree di mana setiap nodes memiliki degree 0 atau 2 dan setiap leaf berada pada level terbawah
  • 12. 12SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Binary Tree • Complete Binary tree: binary tree dengan tinggi k adalah binary tree yang miliki jumlah maximum nodes di levels 0 sampai k – 1, dan pada level k seluruh node mampat ke kiri. • Jadi suatu perfect binary tree adalah juga complete binary tree
  • 13. 13SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Contoh Binary Tree  Representasi ekspresi arithmatik (expression tree)
  • 14. 14SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Ketentuan mengenai Full Binary Tree  (# external nodes ) = (# internal nodes) + 1  (# nodes at level i) ≤ 2i  (# external nodes) ≤ 2(height)‫‏‬  (height)  log2 (# external nodes)‫‏‬  (height)  log2 (# nodes) - 1  (height) ≤ (# internal nodes) = ((# nodes) - 1)/2  Jika tinggi = k, maka #node = 2k+1 - 1
  • 15. 15SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 BinaryNode dalam Java  Tree adalah sekumpulan nodes yang dideklarasikan secara rekursif. class BinaryNode<A> { A element; BinaryNode<A> left; BinaryNode<A> right; }
  • 16. 16SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 ADT Tree dalam Java  ADT tree menyimpan referensi dari root node, yang merupakan awal untuk mengakses tree. public class BinaryTree<A> { private BinaryNode<A> root; public BinaryTree( )‫‏‬ { root = null; } }
  • 17. 17SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Berfikir Rekursif  Menghitung tinggi tree dapat menjadi program yang rumit bila tidak menerapkan rekursif.  Tinggi sebuah tree adalah: maksimum tinggi dari subtree ditambahkan satu (tinggi dari root).  HT = max (HL+1, HR+1)‫‏‬ HL HR HL+1 HR+1
  • 18. 18SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Menghitung tinggi tree  Antisipasi base case (empty tree)‫‏‬.  Catatan: Tree dengan hanya satu node memiliki tinggi = 0.  Terapkan perhitungan/analisa sebelumnya dalam bentuk program. public static int height (BinaryNode<A> t)‫‏‬ { if (t == null) { return -1; } else { return max(height (t.left) + 1, height (t.right) + 1); } }
  • 19. 19SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Algoritma pada Binary Tree  Struktur data tree di definisikan / dilihat secara rekursif:  sebuah binary tree adalah tree kosong atau terdiri dari sebuah node dengan dua buah sub tree (kiri dan kanan) yang masing-masing adalah tree juga.  Algoritma untuk Binary Tree akan lebih mudah dinyatakan secara rekursif.  Binary tree memiliki dua kasus rekursif  Base case: empty – leaf – external node.  Recursive case: Sebuah internal node (root) and dua binary trees (subtree kiri dan subtree kanan)‫‏‬  Traversing Tree: “Menjalani/mengunjungi” tree.‫‏‬
  • 20. 20SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Traversing Trees: Preorder traversal  Contoh: reading a document from beginning to end Algorithm preOrder(v)‫‏‬ “visit”‫‏‬node‫‏‬v preOrder(leftChild(v))‫‏‬; preOrder(rightChild(v))‫‏‬;
  • 21. 21SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Print Pre-Order class BinaryNode<A> { void printPreOrder()‫‏‬{ System.out.println( element ); // Node if( left != null )‫‏‬ left.printPreOrder( ); // Left if( right != null )‫‏‬ right.printPreOrder( ); // Right } } class BinaryTree<A> { public void printPreOrder(){ if( root != null )‫‏‬ root.printPreOrder( ); } }
  • 22. 22SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Traversing Trees: Postorder traversal Contoh: du (disk usage) command in Unix Algorithm postOrder(v)‫‏‬ postOrder(leftChild(v))‫‏‬; postOrder(rightChild(v))‫‏‬; “visit” node v
  • 23. 23SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Print Post-Order class BinaryNode<A> { void printPostOrder( )‫‏‬ { if( left != null )‫‏‬ left.printPostOrder( ); // Left if( right != null )‫‏‬ right.printPostOrder( ); // Right System.out.println( element ); // Node } } class BinaryTree<A> { public void printPostOrder( )‫‏‬ { if( root != null )‫‏‬ root.printPostOrder( ); } }
  • 24. 24SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Traversing Trees: Inorder traversal Algorithm inOrder(v)‫‏‬ inOrder(leftChild(v))‫‏‬ “visit”‫‏‬node‫‏‬v inOrder(rightChild(v))‫‏‬
  • 25. 25SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Traversing tree: Inorder Traversal  Contoh: Urutan penulisan ekspresi aritmatika  Mencetak sebuah expressi aritmatika.  print “(“ before traversing the left subtree  print “)” after traversing the right subtree
  • 26. 26SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Catatan Mengenai Inorder Traversal  Inorder traversal menghasilkan vertical projection.
  • 27. 27SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Print InOrder class BinaryNode<A> { void printInOrder( )‫‏‬ { if( left != null )‫‏‬ left.printInOrder( ); // Left System.out.println( element ); // Node if( right != null )‫‏‬ right.printInOrder( ); // Right } } class BinaryTree<A> { public void printInOrder( )‫‏‬ { if( root != null )‫‏‬ root.printInOrder( ); } }
  • 28. 28SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Traversing Tree Pre-Order Post-Order InOrder
  • 29. 29SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Latihan: Traversing Trees  Algoritma traversing mana yang sesuai untuk melakukan operasi perhitungan nilai expressi aritmatika yang direpresentasikan menggunakan binary tree?
  • 30. 30SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Jawaban: postorder traversal  Algorithm evaluateExpression(v)‫‏‬ if v is an external node return nilai bilangan pada v else x = evaluateExpression(leftChild(v))‫‏‬ y = evaluateExpression(rightChild(v))‫‏‬ // Misalkan o adalah operator pada v return x o y
  • 31. 31SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Running Time  Strategy yang digunakan adalah postorder traversal: information dari node dihitung setelah informasi dari seluruh children dihitung.  Postorder traversal running time adalah N (jumlah elemen dalam tree) dikalikan beban waktu untuk memproses tiap node.  Running time -nya linear karena tiap node hanya diproses sekali dengan beban waktu konstan.
  • 32. 32SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Latihan  Asumsi: Sebuah binary tree (seluruh internal node memiliki degree 2) dengan elemen bilangan bulat.  Buat algoritma yang melakukan:  Pencarian bilangan paling besar.  Penghitungan total bilangan dalam tree.
  • 33. 33SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Kesulitan dengan rekursif  Terkadang, kita ingin memroses semua node tanpa peduli urutan.  Agar mudah, kita mau looping sederhana  Iterator  Bagaimana caranya implementasi secara rekursif?  Bayangkan saat current node yang sedang diakses adalah sebuah internal node. Bagaimana menentukan node mana yang akan diakses selanjutnya?  Pada fungsi rekursif, informasi ini implisit pada call stack.  Bagaimana menghindari rekursif?  Bagaimana mengimplementasikan traversal yang tidak rekursif?
  • 34. 34SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Rekursif vs. Loop  Fungsi rekursif dieksekusi Java menggunakan stack.  Kita dapat melakukan traversal non-rekursif dengan membuat stack sendiri.  Dengan kata lain, meng-emulasikan: stack of activation records.  Apakah mungkin non-rekursif lebih cepat dari rekursif?  Ya  Mengapa?  Kita dapat menyimpan hanya informasi yang penting saja dalam stack, sementara compiler menyimpan seluruh activation record.  Namun demikian efisiensi yang dihasilkan tidak akan terlalu besar apalagi dengan teknologi optimisasi compiler yang semakin maju.
  • 35. 35SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Tree Iterator: implementation  Tree iterator dan traversal-nya diimplementasikan secara non-rekursif menggunakan stack.  Lihat code di: https://telaga.cs.ui.ac.id/WebKuliah/IKI20 100/resources/weiss.code/TestTreeIterators .java
  • 36. 36SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Post-Order Traversal dengan Stack  Gunakan stack untuk menyimpan status terakhir. (node yang sudah dikunjungi tapi belum selesai diproses)‫‏‬  sama dengan PC (program counter) dalam activation record  Apa saja status pada post-order traversal? 0. akan melakukan rekursif pada subtree kiri 1. akan melakukan rekursif pada subtree kanan
  • 37. 37SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Post-Order Algorithm/Pseudocode  init: push the root kedalam stack dengan status 0  advance: while (not stack.empty())‫‏‬ node X = pop from the stack switch (state X): case 0: push node X with state 1; push left child node X (if it exists) w/ state 0; break; case 1: push node X with state 2; push right child node X (if it exists) w/ state 0; break; case 2: “visit”/”set current to” the node X; return;
  • 38. 38SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Post-Order traversal: stack states
  • 39. 39SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 In-Order Traversal using Stack  Apa saja status pada in-order traversal? 0. akan melakukan rekursif pada subtree kiri 1. akan memproses node yang dikunjungi 2. akan melakukan rekursif pada subtree kanan
  • 40. 40SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 In-Order Algorithm/Pseudocode  init: push the root into the stack with state 0  advance: while (not stack.empty())‫‏‬ node X = pop from the stack switch (state X): case 0: push node X with state 1; push left child node X (if it exists) w/ state 0; break; case 1: push node X with state 2; “visit”/”set current to” the node X; return; case 2: push right child node X (if it exists) w/ state 0; break;
  • 41. 41SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 In-Order Algorithm/Pseudocode  init: push the root into the stack with state 0  advance (optimize): while (not stack.empty())‫‏‬ node X = pop from the stack switch (state X): case 0: push node X with state 1; push left child node X (if it exists) w/ state 0; break; case 1: “visit”/”set current to” the node X; push right child node X (if it exists) w/ state 0; return;
  • 42. 42SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Pre-Order Traversal using Stack  Apa saja status pada pre-order traversal? 0. akan memproses node yang dikunjungi 1. akan melakukan rekursif pada subtree kiri 2. akan melakukan rekursif pada subtree kanan
  • 43. 43SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Pre-Order Algorithm/Pseudocode  init: push the root into the stack with state 0  advance: while (not stack.empty())‫‏‬ node X = pop from the stack switch (state X): case 0: “visit”/”set current to” the node X; push node X with state 1; break; case 1: push right child node X (if it exists) w/ state 0; push node X with state 2; break; case 2: push left child node X (if it exists) w/ state 0; break;
  • 44. 44SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Pre-Order Algorithm/Pseudocode  init: push the root into the stack  advance (optimized): while (not stack.empty())‫‏‬ node X = pop from the stack “visit”/”set current to” the node X; push right child node X (if it exists); push left child node X (if it exists); return;
  • 45. 45SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Latihan  Buat algorithm/psedo-code dengan in-order traversal menggunakan stack.  Buat algorithm/psedo-code dengan pre- order traversal menggunakan stack.
  • 46. 46SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Euler Tour Traversal  generic traversal pada binary tree  Strategi traversal preorder, inorder, dan postorder adalah kasus khusus dari Euler tour traversal  “walk around” the tree dan kunjungi tiap node tiga kali:  dari arah parent.  dari sub tree kiri  dari sub tree kanan
  • 47. 47SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Level-order Traversal  Kunjungi root diikuti oleh seluruh node pada sub tree dari kiri ke kanan kemudian diikuti oleh node pada sub tree-nya lagi.  Tree dikunjungi berdasarkan level.  Pada tree dibawah urutan kunjungan adalah: A - B - C - D - E - F - G - H - I
  • 48. 48SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Level-order Traversal: idea  Gunakan queue bukan stack  Algorithm (mirip dengan pre-order)‫‏‬  init: enqueue the root into the queue  advance: node X = dequeue from the queue “visit”/”set current to” the node X; enqueue left child node X (if it exists); enqueue right child node X (if it exists);
  • 49. 49SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Latihan  Buat program untuk mencetak isi dari sebuah binary tree secara level order  Implementasikan menggunakan queue  Dapatkan anda membuat implementasi yang lebih mudah / sederhana?  Hint: Coba pikirkan representasi binary tree yang lain, sehingga implementasi level order dapat menjadi lebih sederhana.
  • 50. 50SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Representasi binary tree dengan array  Complete binary tree dengan n nodes dapat diresentasikan menggunakan array dengan index dari 1..n  .  Untuk setiap node dengan index i, maka:  Parent (i) terletak pada index i/2 if i 1; for i =1, tidak ada parent.  Left-child (i) terletak pada 2i if 2i  n. (else tidak ada left-child)‫‏‬  Right-child (i) terletak pada 2i+1 if 2i +1  n
  • 51. 51SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08 Latihan  Pada ADT tree yang berisikan elemen bilangan bulat. Hitung elemen paling kecil pada leaves dan update seluruh leaves pada tree tersebut dengan elemen terkecil tersebut. (Repmin problem)  Tantangan: Apakah algoritma anda dapat melakukannya dengan satu kali traversal? Input Output