![Page 1: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/1.jpg)
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
![Page 2: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/2.jpg)
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)
![Page 3: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/3.jpg)
3SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Outline
Tree
Contoh
terminologi/definisi
Binary tree
Traversal of trees
Iterator
![Page 4: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/4.jpg)
4SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Contoh
Sebuah tree merepresentasikan sebuah
hirarki
Mis.: Struktur organisasi sebuah perusahaan
![Page 5: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/5.jpg)
5SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Contoh
Daftar isi sebuah buku
![Page 6: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/6.jpg)
6SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Contoh
File system
![Page 7: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/7.jpg)
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 subtreeProperty:
(# edges) = (#nodes) - 1
![Page 8: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/8.jpg)
8SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Tree dilihat secara Rekursif
Setiap sub-tree adalah juga sebuah tree!
![Page 9: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/9.jpg)
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.
![Page 10: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/10.jpg)
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
BC
DE
FG
HI
J
K
Suatu Binary Tree
Suatu General Tree
General Tree
w/ representasi.
First child/next sibling
Representasi “first child/next sibling”
![Page 11: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/11.jpg)
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
![Page 12: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/12.jpg)
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
![Page 13: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/13.jpg)
13SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Contoh Binary Tree
Representasi ekspresi arithmatik (expression
tree)
![Page 14: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/14.jpg)
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
![Page 15: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/15.jpg)
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;
}
![Page 16: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/16.jpg)
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;}
}
![Page 17: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/17.jpg)
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, H
R(1+
HLHR
HL+1HR+1
![Page 18: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/18.jpg)
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);
}
}
![Page 19: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/19.jpg)
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.
![Page 20: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/20.jpg)
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”nodev
preOrder(leftChild(v));
preOrder(rightChild(v));
![Page 21: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/21.jpg)
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( );
}
}
![Page 22: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/22.jpg)
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
![Page 23: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/23.jpg)
23SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Print Post-Orderclass 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( );
}
}
![Page 24: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/24.jpg)
24SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Traversing Trees: Inorder traversal
Algorithm inOrder(v)
inOrder(leftChild(v))
“visit”nodev
inOrder(rightChild(v))
![Page 25: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/25.jpg)
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
![Page 26: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/26.jpg)
26SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Catatan Mengenai Inorder Traversal
Inorder traversal menghasilkan vertical
projection.
![Page 27: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/27.jpg)
27SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Print InOrderclass 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( );
}
}
![Page 28: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/28.jpg)
28SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Traversing Tree
Pre-Order Post-Order InOrder
![Page 29: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/29.jpg)
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?
![Page 30: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/30.jpg)
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
![Page 31: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/31.jpg)
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.
![Page 32: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/32.jpg)
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.
![Page 33: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/33.jpg)
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?
![Page 34: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/34.jpg)
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.
![Page 35: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/35.jpg)
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
![Page 36: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/36.jpg)
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
2. akan memproses node yang dikunjungi
![Page 37: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/37.jpg)
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;
![Page 38: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/38.jpg)
38SUR – HMM – AA Fasilkom UI – IKI20100/IKI80110P 2009/2010 Ganjil - Pekan 08
Post-Order traversal: stack states
![Page 39: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/39.jpg)
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
![Page 40: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/40.jpg)
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;
![Page 41: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/41.jpg)
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;
![Page 42: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/42.jpg)
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
![Page 43: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/43.jpg)
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;
![Page 44: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/44.jpg)
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;
![Page 45: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/45.jpg)
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.
![Page 46: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/46.jpg)
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
![Page 47: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/47.jpg)
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
![Page 48: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/48.jpg)
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);
![Page 49: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/49.jpg)
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.
![Page 50: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/50.jpg)
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
(tidak ada right-child)
![Page 51: Struktur Data & Algoritma - aren.cs.ui.ac.idaren.cs.ui.ac.id/sda/resources/sda2010/10_tree.pdf · Struktur Data & Algoritma 2009/2010 Ganjil –Pekan 08 ... Memahami definisi dan](https://reader033.vdocument.in/reader033/viewer/2022052407/5aaf9cf17f8b9a190d8d81d2/html5/thumbnails/51.jpg)
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