4/2/2019 ICB/Alsrudat/W13 2
Struktur data linier vs non-linier
• Struktur data linier adalah struktur data yang mengorganisasi data
secara linier dimana elemen-elemen disusun secara sekuensial, yang
berarti jika diambil salah satu elemen pada struktur data, elemen
tersebut memiliki 1 elemen pendahulu dan 0 atau 1 elemen pengikut.
Array 1 dimensi, linked list, stack, dan queue adalah struktur data
linier.
• Struktur data non-linier adalah struktur data yang tidak diorganisasi
secara sekuensial. Sebuah elemen data tidak perlu bertaut pada 1
elemen saja, tetapi bisa beberapa elemen data. Array multi dimensi,
tree, graph adalah struktur data non-linier.
4/2/2019 ICB/Alsrudat/W13 3
Struktur Tree
4/2/2019 ICB/Alsrudat/W13 4
Nature View of a Tree
leaves
branche
s root
4/2/2019 ICB/Alsrudat/W13 5
Computer Scientist’s View
root
leaves
branches
nodes
4/2/2019 ICB/Alsrudat/W13 6
Apakah Tree Structure itu ?
• Struktur data yang menunjukkan hubungan bertingkat (memiliki
hierarkhi)
4/2/2019 ICB/Alsrudat/W13 7
Definisi pohon umum
• Pohon umum (Generic tree) merupakan kumpulan dari simpul (node) yang
terhubung/terkait dengan pointer.
• Pohon berakar (rooted tree) memiliki sebuah simpul khusus yang
merupakan simpul awal yang disebut dengan root r atau akar dan nol atau
lebih sub-pohon (sub-trees) T1 , T2 ,...,Tk dimana setiap root dari sub-tree
terhubung ke r.
• Root dari setiap sub-tree merupakan anak (child) dari r dan r adalah induk
(parent) dari setiap sub-tree.
• Setiap simpul pohon umum dapat memiliki anak berapa pun.
• Simpul tanpa anak disebut dengan daun (leaf).
• Simpul-simpul (nodes) dengan induk yang sama disebut saudara kandung
(siblings).
4/2/2019 ICB/Alsrudat/W13 8
Definisi pohon umum
• Sebuah lintasan dari n1 ke nk merupakan urutan dari n1 , n2 , …, nk
sedemikian hingga ni adalah induk dari ni+1 untuk
1≤i<k
• Untuk sembarang node ni , kedalaman ni adalah panjang lintasan unik dari
root ke ni . Dengan demikian, kedalaman root adalah 0 (nol).
• Untuk sembarang node ni , tinggi ni adalah panjang lintasan maksimum
dari ni ke leaf . Dengan demikian, tinggi daun (leaf) adalah 0 (nol).
• Dengan definisi pada halaman sebelumnya, tinggi pohon adalah sama
dengan tinggi root.
• Tinggi pohon selalu sama dengan kedalaman leaf terdalam pada pohon. Ini
sama dengan kedalaman pohon.
4/2/2019 ICB/Alsrudat/W13 9
Hubungan antar komponen
• Hubungan antar elemen: parent-child, node 1 root
father-son, mother-daughter
• Nama node: nama(angka) yang dipakai node 2 3
node
Contoh graph
• Tree vs Graph
• Tree: setiap node kecuali root hanya
memiliki sebuah parent
• Graph: dapat memiliki lebih dari
sebuah parent
4/2/2019 ICB/Alsrudat/W13 10
Terminologi padaTree
Root (akar): node tanpa parent (A)
Siblings (saudara): node-node yang memiliki Degree dari suatu node: jumlah
parent yang sama (B,C,D), (I,J,K),(E,F),(G,H). child (anak) dari node tersebut.
Internal node: node dengan minimal 1 child Degree dari suatu tree: jumlah
(A, B, C, F) maksimum node yang dimiliki
(subtree)-nya.
External node (leaf ): node tanpa children
(E, I, J, K, G, H, D) Subtree: pohon yang terdiri dari
satu node dan descendant-nya.
Ancestors dari suatu node: node yang A
ditemukan, ketika menyusuri tree ke atas
dari suatu node.
Descendant dari suatu node: node yang
B C D
ditemukan ketika menyusuri tree ke bawah
dari suatu node.
Depth (tingkat/level) dari suatu node:
jumlah ancestor suatu node. E F G H
1 s
2 3 1
4 5 6 7 2
8 9 10 3
4/2/2019 ICB/Alsrudat/W13 12
Latihan
Property Value
A
Number of nodes
C
Height
B
Root Node
Leaves
D E F Interior nodes
Ancestors of H
Descendants of B
G Siblings of E
Right subtree of A
H I Degree of this tree
4/2/2019 ICB/Alsrudat/W13 13
Definisi TREE
Sebuah tree didefinisikan sebagai struktur yang dibentuk secara
recursif oleh kedua rule berikut:
1. Sebuah node adalah sebuah tree. Node satu-satunya pada
tree ini berfungsi sebagai root maupun leaf.
2. Dari k buah tree T1~Tk , dan masing-masing memiliki root n1
~nk.Jika node n adalah parent dari node n1~nk, akan
diperoleh sebuah tree baru T yang memiliki root n. Dalam
kondisi ini, tree T1~Tkmenjadi sub-tree dari tree T. Root dari
sub-tree n1~nkadalah child dari node n .
Tree
root
1
leaf node
4/2/2019 ICB/Alsrudat/W13 14
Definisi TREE
Sebuah tree didefinisikan sebagai struktur yang dibentuk secara
recursif oleh kedua rule berikut:
1. Sebuah node adalah sebuah tree. Node satu-satunya pada tree
ini berfungsi sebagai root maupun leaf.
2. Dari k buah tree T1~Tk , dan masing-masing memiliki root n1
~nk.Jika node n adalah parent dari node n1~nk, akan
diperoleh sebuah tree baru T yang memiliki root n. Dalam
kondisi ini, tree T1~Tkmenjadi sub-tree dari tree T. Root dari
sub-tree n1~nkadalah child dari node n .
T1 1 n1 T2 T3 T4
1 n2 1 n3 1 n4
2 3 4 2 3 2
5 6 3
4/2/2019 ICB/Alsrudat/W13 15
Definisi TREE
2. Dari k buah tree T1~Tk , dan masing-masing memiliki root n1~nk. Jika
node n adalah parent dari node n1~nk, akan diperoleh sebuah tree
baru T yang memiliki root n. Dalam kondisi ini, tree T1~Tkmenjadi
sub-tree dari tree T. Root dari sub-tree n1~nkadalah child dari node
n.
1 n
T
T1 2 n1 T2 T3 T4
3 n2 4 n3 5 n4
6 7 8 9 10 11
12 13 14
4/2/2019 ICB/Alsrudat/W13 16
Varian tree
• Ada beberapa varian tree generik yang dibedakan oleh struktur
pengorganisasian data pada tree.
• Beberapa varian tersebut adalah
• Binary tree: tree dengan jumlah anak sebanyak 2 untuk setiap node.
• Binary search tree: binary tree dengan properti tambahan yakni, untuk setiap
node x pada, tree nilai kunci pada sub-tree sebelah kiri x selalu lebih kecil dari
nilai kunci x, sedangkan nilai kunci pada sub-tree sebelah kanan x selalu lebih
besar dari nilai kunci x.
• AVL tree: Binary search tree yang seimbang (self-balancing binary search
tree).
4/2/2019 ICB/Alsrudat/W13 17
Varian tree
• Red-black tree: binary search tree yang seimbang dimana setiap node
diberi warna merah (red) atau hitam sesuai dengan aturan red black
tree.
• B-tree: suatu struktur tree yang menyimpan data secara terurut
dimana anak (child) dari suatu node bisa lebih dari 2. Jadi b-tree
bukanlah pohon biner. Properti yang penting adalah tree harus
seimbang (balanced). B-tree lazim dipakai untuk menyimpan indeks
tabel pada basis data
4/2/2019 ICB/Alsrudat/W13 18
Binary Tree
4/2/2019 ICB/Alsrudat/W13 19
Definisi
a a a a a
b b b c b
4/2/2019 ICB/Alsrudat/W13 21
Contoh pohon pencarian biner
• Gambar sebelah kiri adalah pohon pencarian biner, sedangkan
sebelah kanan bukan pohon pencarian biner.
4/2/2019 ICB/Alsrudat/W13 22
Pohon pencarian biner contoh efisien dan
tidak efisien
4/2/2019 ICB/Alsrudat/W13 23
Definisi Binary Tree
typedef int infotype;
typedef struct tNode *address;
typedef struct tNode {
infotype Info;
address Left;
address Right;
} node;
typedef address BinTree;
4/2/2019 ICB/Alsrudat/W13 24
Definisi Prototype (1)
• BinTree MakeTree (infotype Akar);
//I.S. Sembarang F.S. Menghasilkan sebuah pohon P
//Menghasilkan sebuah pohon biner P dari A, dengan L = Nil, dan R = Nil, jika
alokasi berhasil
//Menghasilkan pohon P yang kosong (Nil) jika alokasi gagal
• boolean IsEmpty(BinTree T);
/* mengembalikan true apabila BinTree merupakan pohon kosong */
• BinTree InsertNode(infotype X, BinTree P);
//Menambahkan satu buah node ke Binary Tree dengan aturan pembentukan
binary tree
• boolean Search (BinTree P, infotype X); //Mengirimkan true jika ada node dari
T yang bernilai X
4/2/2019 ICB/Alsrudat/W13 25
Definisi Prototype (2)
• address FindMin(BinTree P);
//mencari node dengan nilai minimum
• address FindMax(BinTree P);
//mencari node dengan nilai maximum
• void DeleteNode (BinTree *P, infotype X);
//I.S. Pohon P tidak kosong
F.S. Nilai X yang dihapus pasti ada, sebuah node dengan nilai X dihapus
• void PrintPreOrder(BinTree P);
/* menuliskan informasi secara preorder spt yg dijelaskan*/
4/2/2019 ICB/Alsrudat/W13 26
Implementasi Binary Tree
b b
a c
a c
4/2/2019 ICB/Alsrudat/W13 27
void MakeTree (infotype Akar, BinTree *P);
4/2/2019 ICB/Alsrudat/W13 28
void InsertNode(infotype X, BinTree *P);
Nil Nil
4/2/2019 ICB/Alsrudat/W13 29
boolean Search (BinTree P, infotype X);
4/2/2019 ICB/Alsrudat/W13 31
void DeleteNode (BinTree *P, 1 BinTree DeleteNode (BinTree P, infotype X){
infotype X); 2 address temp;
3 if(IsTreeEmpty(P))
4 printf("Nilai tidak ditemukan \n");
5 else if(X < P->Info)
6 Left(P) = DeleteNode(Left(P), X);
Left Right 6 7 else if (X > P->Info)
8 Right(P) = DeleteNode(Right(P), X);
9 else{
10 if(Left(P) && Right(P)){
2 8 11 temp =FindMin (Right(P));
12 P->Info = temp->Info;
Nil Nil 13 Right(P) = DeleteNode(Right(P), P->Info);
14 }else{
1 4 15 temp = P;
16 if(IsTreeEmpty(Left(P)))
Nil Nil 17 P=Right(P);
Nil 18 else if (IsTreeEmpty(Right(P)))
3 P = Left(P);
19
20 free(temp);
21 }
22 }
23 return P;
4/2/2019 ICB/Alsrudat/W13 32
24 }
Tree Traversal
4/2/2019 ICB/Alsrudat/W13 33
Definisi Tree Traversal
Teknik menyusuri tiap node dalam sebuah tree secara sistematis, sehingga
semua node dapat dan hanya satu kali saja dikunjungi
Ada tiga cara traversal:
preorder
inorder
postorder
Untuk tree yang kosong, traversal tidak perlu dilakukan
4/2/2019 ICB/Alsrudat/W13 34
Preorder A
E F
A→B→C→D→E→G→F→H
4/2/2019 ICB/Alsrudat/W13 35
void PrintPreOrder(BinTree P)
Left Right 6
1 void PrintPreOrder(BinTree P){
2 if (!IsTreeEmpty(P)){
2 8 3 printf("%d ", P->Info);
4 PrintPreOrder(Left(P));
Nil Nil 5 PrintPreOrder(Right(P));
6 }
1 4
7 }
Nil
Nil
3
6 2 1 4 3 8
4/2/2019 ICB/Alsrudat/W13 36
Inorder A
E F
C→B→G→E→D→F→A→H
4/2/2019 ICB/Alsrudat/W13 37
void PrintInOrder(BinTree P)
Left Right 6
1 void PrintInOrder(BinTree P){
2 if (!IsTreeEmpty(P)){
2 8 3 PrintInOrder (Left(P));
4 printf("%d ", P->Info);
Nil Nil 5 PrintInOrder (Right(P));
6 }
1 4
7 }
Nil
Nil
3
4/2/2019 ICB/Alsrudat/W13 38
Postorder A
E F
C→G→E→F→D→B→H→A
4/2/2019 ICB/Alsrudat/W13 39
void PrintPostOrder(BinTree P)
Left Right 6
1 void PrintPostOrder(BinTree P){
2 if (!IsTreeEmpty(P)){
2 8 3 PrintPostOrder(Left(P));
4 Print PostOrder(Right(P));
Nil Nil 5 printf("%d ", P->Info); }
6 }
1 4
7
Nil
Nil
3
4/2/2019 ICB/Alsrudat/W13 40
Terima kasih
4/2/2019 ICB/Alsrudat/W13 41