Anda di halaman 1dari 30

Tree

Struktur Data

nur.zahrati@polibatam.ac.id
 Definisi
 Istilah pada Tree
Overview  Aplikasi tree
 Jenis-jenis tree
 Operasi pada binary tree
 Struktur non linear dimana data disusun sebagai
simpul-simpul (node) yang saling berkaitan secara
hirarkis seperti struktur pohon
Tree  Salah satu simpul merupakan akar (root), dan simpul-
simpul lain membentuk suatu sub tree
 Simpul dengan posisi di atas disebut simpul parent,
sedangkan simpul di bawah disebut simpul child
 Superordinat (/predecessor/father/parent) : simpul yang
berada di atas simpul tertentu
 Contoh: Superordinat D adalah B
 Parent dari C adalah …
 Subordinat (/successor/son/children) : simpul di bawah
Istilah-Istilah simpul tertentu
pada Tree  Contoh: Subordinat C adalah F dan G
 Ancestor : seluruh simpul yang terletak sebelum simpul
tertentu pada jalur yang sama (nenek moyang yang
segaris)
 Contoh: Ancestor dari C adalah A
 Ancestor dari E adalah …
 Descendant: seluruh simpul yang terletak sesudah
Istilah-Istilah simpul tertentu pada jalur yang sama (turunan)
pada Tree  Contoh: Descendant dari B adalah D dan E
 Descendant dari A adalah …
 Sibling : simpul-simpul yang memiliki parent yang
sama dengan suatu simpul
 D adalah sibling dari E
 B adalah sibling dari …
 Subtree: bagian dari tree yang berupa suatu simpul
Istilah-Istilah beserta descendant-nya dan memiliki semua
pada Tree karakteristik tree
 Manakah contoh subtree dari tree berikut?
 Root: satu-satunya simpul khusus dalam tree yang
tidak memiliki predecessor
 Root dari tree berikut adalah …
 Leaf: simpul-simpul dalam tree yang tidak memiliki
successor
Istilah-Istilah  Leaf dari tree berikut adalah …

pada Tree
 Level: tingkatan pada tree. Root memiliki level 0 (ada
juga yang menyebut 1), setiap turun satu subordinat,
level bertambah 1.
 Height (/depth): banyaknya tingkatan (level) dalam
Istilah-Istilah suatu tree

pada Tree
 Degree suatu simpul: banyaknya child yang dimiliki
suatu simpul
 Degree simpul A adalah 2
 Degree simpul D adalah …
 Degree suatu tree: degree tertinggi (yang mungkin ada)
Istilah-Istilah dari degree simpul yang ada
 Degree tree berikut adalah …
pada Tree  Size: banyaknya simpul dalam suatu tree
 Size dari tree berikut adalah …
 Sistem file
 Penyimpanan data dalam volume besar
 Struktur data pada kasus-kasus tertentu: ekspresi aritmatika,
representasi variasi gerakan pada game, dll.
 Banyak lagi

Aplikasi Tree
 M-ary tree  tree dengan derajat M
Jenis-Jenis Tree  Binary tree  tree dengan derajat 2
 M menyatakan derajat tree
 Contoh: M-ary tree dengan M=3
 Simpul:

data
M-ary Tree

link1 link3
link2
Misal: M=3
struct Node{
char data;
struct Node *link1;
struct Node *link2;
struct Node *link3;
Representasi };
Simpul M-ary typedef struct Node Simpul;

Tree data

link1 link3
link2
 Tree khusus, dengan M=2
 Memiliki 0-2 anak per simpulnya

struct Node{
Binary Tree data char data;
struct Node *kiri;
struct Node *kanan;
};
kiri kanan typedef struct Node Simpul;
 Terkadang untuk keperluan tertentu, misal: untuk
memudahkan penghapusan, digunakan struktur sbb.

parent
struct Node{
struct Node *parent;
Binary Tree char data;
data struct Node *kiri;
struct Node *kanan;
};
typedef struct Node Simpul;
kiri kanan
 Full Binary Tree
 Binary Tree yang tiap nodenya (kecuali leaf) memiliki
dua child dan tiap sub tree harus mempunyai panjang
path yang sama
Jenis Binary
Tree
 Complete Binary Tree
 Mirip dengan Full Binary Tree, namun tiap subtree
boleh memiliki panjang path yang berbeda. Node
kecuali leaf memiliki 0 atau 2 child
Jenis Binary
Tree
 Skewed Binary Tree
 Binary Tree yang semua nodenya (kecuali leaf) hanya memiliki
satu child.

Jenis Binary
Tree
 Inisialisasi
 Pembuatan simpul baru
Operasi pada  isEmpty
Binary Tree  Penambahan (insert) simpul baru
 Penghapusan (delete) simpul
 Pembacaan/penelusuran tree
 Pemberian nilai awal pada simpul yang menjadi root

void inisialisasi(Simpul **T) {


Inisialisasi *T = NULL;
}
 Membuat simpul baru dan mengisinya dengan suatu data

Simpul *simpulBaru(char item) {


Simpul *n;
n = (Simpul*) malloc(sizeof(Simpul));
Pembuatan if(n != NULL) {
n->data = item;
Simpul Baru n->kiri = NULL;
n->kanan = NULL;
}
return n;
}
 Mengecek apakah tree kosong
 Masukan: pointer yang menjadi root

int isEmpty(Simpul *T) {


isEmpty return (T == NULL);
}
 Menambahkan simpul baru ke dalam suatu posisi pada tree

void tambahSimpul(Simpul **p, char item) {


Simpul *n;
n = simpulBaru(item);
Penambahan *p = n;
}
Simpul Baru
 Tree traversal
 Membaca/mengunjungi simpul-simpul binary tree
Pembacaan dengan urutan tertentu
 Ada 3 macam cara:
Binary Tree  Preorder : root, kiri, kanan
 Inorder : kiri, root, kanan
 Postorder : kiri, kanan, root
1. Kunjungi root
2. Telusuri subtree kiri secara preorder
3. Telusuri subtree kanan secara preorder

void preOrder(Simpul *T) {


PreOrder if(!isEmpty(T)) {
printf("%c ", T->data);
preOrder(T->kiri);
preOrder(T->kanan);
}
}
1. Telusuri subtree kiri secara inorder
2. Kunjungi root
3. Telusuri subtree kanan secara inorder

void inOrder(Simpul *T) {


InOrder if(!isEmpty(T)) {
inOrder(T->kiri);
printf("%c ", T->data);
inOrder(T->kanan);
}
}
1. Telusuri subtree kiri secara postorder
2. Telusuri subtree kanan secara postorder
3. Kunjungi root

void postOrder(Simpul *T) {


PostOrder if(!isEmpty(T)) {
postOrder(T->kiri);
postOrder(T->kanan);
printf("%c ", T->data);
}
}
Contoh
Latihan

 Hasil pembacaan:
 Preorder: …
 Inorder: …
 Postorder: …
Apa saja yang sudah Anda pelajari hari ini?

30

Anda mungkin juga menyukai