SlideShare uma empresa Scribd logo
1 de 44
Manipulasi Tree
                         1




Nurdiansah PTIK 09 UNM       12/10/2012
Tree
                             2

 Kumpulan node yang saling terhubung satu sama lain
  dalam suatu kesatuan yang membentuk layaknya struktur
  sebuah pohon.
 Struktur pohon adalah suatu cara merepresentasikan suatu
  struktur hirarki (one-to-many) secara grafis yang mirip
  sebuah pohon, walaupun pohon tersebut hanya tampak
  sebagai kumpulan node-node dari atas ke bawah.
 Suatu struktur data yang tidak linier yang menggambarkan
  hubungan yang hirarkis (one-to-many) dan tidak linier
  antara elemen-elemennya.




Nurdiansah PTIK 09 UNM                             12/10/2012
Cont’…
                           3

 Tree Statik : isi node-nodenya tetap karena bentuk
  pohonnya sudah ditentukan.
 Tree Dinamik : isi nodenya berubah-ubah karena
  proses penambahan (insert) dan penghapusan
  (delete)




Nurdiansah PTIK 09 UNM                         12/10/2012
Node Root
                         4

 Node root dalam sebuah tree adalah suatu node
  yang memiliki hiarki tertinggi dan dapat juga
  memiliki node-node anak. Semua node dapat
  ditelusuri dari node root tersebut.
 Node root adalah node khusus yang tercipta
  pertama kalinya.
 Node-node lain di bawah node root saling
  terhubung satu sama lain dan disebut subtree




Nurdiansah PTIK 09 UNM                       12/10/2012
Implementasi Tree
                         5

 Contoh penggunaan struktur pohon :
   Silsilah keluarga

   Parse Tree (pada compiler)

   Struktur File

   Pertandingan




Nurdiansah PTIK 09 UNM                 12/10/2012
Silsilah Keluarga
                         6




Nurdiansah PTIK 09 UNM       12/10/2012
Parse tree
                         7




Nurdiansah PTIK 09 UNM       12/10/2012
Cont’…
                         8




Nurdiansah PTIK 09 UNM       12/10/2012
Representasi Tree
                         9




Nurdiansah PTIK 09 UNM       12/10/2012
Representasi Tree
                                10

 Notasi Tingkat


 Notasi Kurung
   (A(B(D,E(I,J)),C(F,G,H)))




Nurdiansah PTIK 09 UNM               12/10/2012
Terminologi Tree
                         11




Nurdiansah PTIK 09 UNM        12/10/2012
Sebuah Tree
                         12




Nurdiansah PTIK 09 UNM        12/10/2012
Jenis Tree
                         13


 Binary Tree
   Suatu tree dengan syarat bahwa tiap node hanya
    boleh memiliki maksimal dua subtree dan
    kedua subtree tersebut harus terpisah.
   Tiap node dalam binary tree hanya boleh
    memiliki paling banyak dua child.




Nurdiansah PTIK 09 UNM                      12/10/2012
Cont’…
                         14




Nurdiansah PTIK 09 UNM        12/10/2012
Cont’…
                         15




Nurdiansah PTIK 09 UNM        12/10/2012
Cont’…
                         16




Nurdiansah PTIK 09 UNM        12/10/2012
Cont’…
                         17




Nurdiansah PTIK 09 UNM        12/10/2012
Node pada binary tree
                           18

 Jumlah maksimum node pada setiap tingkat adalah 2n
 Node pada binary tree maksimum berjumlah 2n-1




Nurdiansah PTIK 09 UNM                            12/10/2012
Implementasi Program
                         19

 Tree dapat dibuat dengan menggunakan linked list
  secara rekursif.
 Linked list yang digunakan adalah double linked
  list non circular
 Data yang pertama kali masuk akan menjadi node
  root.
 Data yang lebih kecil dari data node root akan
  masuk dan menempati node kiri dari node root,
  sedangkan jika lebih besar dari data node root,
  akan masuk dan menempati node di sebelah kanan
  node root.


Nurdiansah PTIK 09 UNM                      12/10/2012
Implementasi Program
                         20




Nurdiansah PTIK 09 UNM        12/10/2012
Operasi-operasi Tree
                             21

 Create: membentuk sebuah tree baru yang kosong.
   pohon = NULL;
 Clear: menghapus semua elemen tree.
   pohon = NULL;
 Empty: mengetahui apakah tree kosong atau tidak
   int isEmpty(Tree *pohon){
       if(pohon == NULL) return 1;
       else return 0;
     }




Nurdiansah PTIK 09 UNM                     12/10/2012
Operasi - Operasi Tree
                                     22

 Insert: menambah node ke dalam Tree secara rekursif. Jika data yang
    akan dimasukkan lebih besar daripada elemen root, maka akan
    diletakkan di node sebelah kanan, sebaliknya jika lebih kecil maka akan
    diletakkan di node sebelah kiri. Untuk data pertama akan menjadi
    elemen root.
   Find: mencari node di dalam Tree secara rekursif sampai node
    tersebut ditemukan dengan menggunakan variable bantuan ketemu.
    Syaratnya adalah tree tidak boleh kosong.
   Traverse: yaitu operasi kunjungan terhadap node-node dalam pohon
    dimana masing-masing node akan dikunjungi sekali.
   Count: menghitung jumlah node dalam Tree
   Height : mengetahui kedalaman sebuah Tree
   Find Min dan Find Max : mencari nilai terkecil dan terbesar pada
    Tree
   Child : mengetahui anak dari sebuah node (jika punya)



Nurdiansah PTIK 09 UNM                                            12/10/2012
Jenis Transverse
                                 23

     PreOrder: cetak node yang dikunjungi, kunjungi left,
      kunjungi right
     InOrder: kunjungi left, cetak node yang dikunjungi, kunjungi
      right
     PostOrder: kunjungi left, kunjungi right, cetak node yang
      dikunjungi




Nurdiansah PTIK 09 UNM                                    12/10/2012
Ilustrasi Insert
                         24




Nurdiansah PTIK 09 UNM        12/10/2012
Ilustrasi Insert
                         25

 4. insert(left,3)




Nurdiansah PTIK 09 UNM        12/10/2012
Recursive Insert
                                26
 void tambah(Tree **root,int databaru){
   if((*root) == NULL){
        Tree *baru;
        baru = new Tree;
        baru->data = databaru;
        baru->left = NULL;
        baru->right = NULL;
        (*root) = baru;
        (*root)->left = NULL;
        (*root)->right = NULL;
   }
   else if(databaru < (*root)->data)
        tambah(&(*root)->left,databaru);
   else if(databaru > (*root)->data)
        tambah(&(*root)->right,databaru);
   else if(databaru == (*root)->data)
        printf("Data sudah ada!");
 }


Nurdiansah PTIK 09 UNM                      12/10/2012
Ilustrasi Kunjungan
                         27




Nurdiansah PTIK 09 UNM        12/10/2012
Ilustrasi Kunjungan
                         28




Nurdiansah PTIK 09 UNM        12/10/2012
Ilustrasi Kunjungan
                         29




Nurdiansah PTIK 09 UNM        12/10/2012
Ilustrasi Kunjungan
                                  30

Kunjungan LevelOrder
Hasil kunjungan: “ABCDEFGHI”
Algoritma:
    Siapkan antrian yang kosong
    Inisialisasi: masukkan root ke dalam antrian
    Iterasi: selama Antrian tidak kosong, lakukan:
         Kunjungi elemen pada antrian
         Masukkan node->kiri dan node->kanan ke dalam antrian asal
             node tersebut tidak NULL.
         Keluarkan elemen pertama pada antrian




Nurdiansah PTIK 09 UNM                                       12/10/2012
Level Order
                                 31

                                 -Masukkan root ke antrian
                                 Antrian : 1
                 1
                                 -Kunjungi root (1), masukkan node kiri dan kanan
                                 Antrian : 1, 2, 3
                                 -Keluarkan antrian terdepan (node 1)
                                 Antrian : 2, 3
        2                3       -Kunjungi node 2, masukkan 4 dan 5
                                 Antrian : 2, 3, 4, 5
                                 -Keluarkan node terdepan (node 2)
                                 Antrian : 3, 4, 5
                                 -Kunjungi node 3, masukkan 6 dan 7
 4           5       6       7
                                 Antrian : 3, 4, 5, 6, 7
                                 -Keluarkan antrian terdepan (node 3)
                                 Antrian : 4, 5, 6, 7
                                 -Kunjungi node 4, tidak ada anak, keluarkan (4)
                                 -Kunjungi node 5, tidak ada anak, keluarkan (5)
                                 -Kunjungi node 6, tidak ada anak, keluarkan (6)
Nurdiansah PTIK 09 UNM           -Kunjungi node 7, tidak ada anak, keluarkan (7)
                                                                    12/10/2012
Level Order pseudocode
                                 32
 void LevelOrder(Tree *root)
 {
         Queue queue;
         Enqueue(queue,root);
         while(isEmpty(queue) != 1)
         {
                 Tree n = GetQueue(); //visit
                 print(n->data);
                    if(n->left!=NULL)
                        Enqueue(n->left); //Enqueue if exists
                 if(n->right!=NULL)
                         Enqueue(n->right); //Enqueue if exists
                 Dequeue(queue); //out
           }
 }




Nurdiansah PTIK 09 UNM                                      12/10/2012
Contoh implementasi
                           33

 Misalkan suatu ekspresi berikut: 3 + 2 * 5 – 4




Nurdiansah PTIK 09 UNM                             12/10/2012
Searching in Tree
                                 34
 Tree *cari(Tree *root,int data){
   if(root==NULL) return NULL;
   else if(data < root->data) return (cari(root->left,data));
   else if(data > root->data) return (cari(root->right,data));
   else if(data == root->data) return root;
 }



    Pencarian dilakukan secara rekursif, dimulai dari node root,
    jika data yang dicari lebih kecil daripada data node root, maka
    pencarian dilakukan di sub node sebelah kiri, sedangkan jika
    data yang dicari lebih besar daripada data node root, maka
    pencarian dilakukan di sub node sebelah kanan, jika data yang
    dicari sama dengan data suatu node berarti kembalikan node
    tersebut dan berarti data ditemukan.



Nurdiansah PTIK 09 UNM                                      12/10/2012
Ilustrasi Searching
                         35




Nurdiansah PTIK 09 UNM        12/10/2012
Keterangan Searching
                           36

     Root = 6 dan 8 > 6, maka akan dicari di sub
      node bagian kanan root.
     Root = 10 dan 8 < 10, maka akan dicari di sub
      node bagian kiri root.
     Root = 7 dan 8 > 7, maka akan dicari di sub node
      bagian kanan root.
     Root = 8, berarti 8 = 8, maka akan dikembalikan
      node tersebut dan dianggap ketemu!




Nurdiansah PTIK 09 UNM                         12/10/2012
Jumlah Node Tree
                             37

int count(Tree *root)
{
   if (root == NULL) return 0;
   return count(root->left) + count(root->right) + 1;
}


  Penghitungan jumlah node dalam tree dilakukan
  dengan cara mengunjungi setiap node, dimulai dari
  root ke subtree kiri, kemudian ke subtree kanan dan
  masing-masing node dicatat jumlahnya, dan terakhir
  jumlah node yang ada di subtree kiri dijumlahkan
  dengan jumlah node yang ada di subtree kanan
  ditambah 1 yaitu node root.


Nurdiansah PTIK 09 UNM                                  12/10/2012
Kedalaman (height) Node Tree
                                38

int height(Tree *root)
{
   if (root == NULL) return -1;
   int u = height(root->left), v = height(root->right);
   if (u > v) return u+1;
   else return v+1;
}

  Penghitungan kedalaman dihitung dari setelah root, yang
  dimulai dari subtree bagian kiri kemudian ke subtree bagian
  kanan. Untuk masing-masing kedalaman kiri dan kanan akan
  dibandingkan, jika ternyata subtree kiri lebih dalam, maka yang
  dipakai adalah jumlah kedalaman subtree kiri, demikian
  sebaliknya. Hal ini didasarkan pada prinsip binary tree, dimana
  tree-nya selalu memiliki maksimal 2 node anak.


Nurdiansah PTIK 09 UNM                                   12/10/2012
Find Min Node
                            39

Tree *FindMin(Tree *root)
{
  if(root == NULL)
       return NULL;
  else
       if(root->left == NULL)
             return root;
       else
             return FindMin(root->left);
}

Penggunaan:
Tree *t = FindMin(pohon);



Nurdiansah PTIK 09 UNM                     12/10/2012
Mencari Leaf (daun)
                             40

void leaf(Tree *root){
  if(root == NULL) printf("kosong!");
  if(root->left!=NULL) leaf(root->left);
  if(root->right!=NULL) leaf(root->right);
   if(root->right == NULL && root->left == NULL) printf("%d
  ",root->data);
}




Nurdiansah PTIK 09 UNM                               12/10/2012
Konversi Tree Biasa ke Binary Tree
                                  41

Anak pertama menjadi anak kiri, anak ke-2 menjadi cucu kanan, ke-3
jadi cicit kanan dst




Nurdiansah PTIK 09 UNM                                       12/10/2012
Pembentukan Tree dari Preorder
                          42

 Baca hasil Preorder dari paling kanan ke kiri untuk
  mencari node yang derajatnya lebih dari 0,
  kemudian ambil node sebanyak derajatnya ke kanan.
  Hilangkan node yang terambil tersebut dari hasil
  Preorder
 Lanjutkan langkah 1, dan seterusnya sampai semua
  hasil traversal habis




Nurdiansah PTIK 09 UNM                          12/10/2012
Contoh
                         43

 Preorder: U V W X Y
 Derajat: 2 2 0 0 0


 Derajat bukan nol yang ditemukan pertama
  dari kanan adalah V, ambil 2 node kekanan,
  W dan X, hilangkan.
 Lanjutkan, ketemu U berderajat 2, berarti U
  punya anak V dan Y


Nurdiansah PTIK 09 UNM                  12/10/2012
44



             TO BE CONTINUE…




Nurdiansah PTIK 09 UNM         12/10/2012

Mais conteúdo relacionado

Destaque

Editing poster, syncing voiceover 26.11
Editing poster, syncing voiceover 26.11Editing poster, syncing voiceover 26.11
Editing poster, syncing voiceover 26.11GS6142
 
DELFI turinio projektas "Už ką nobelis?"
DELFI turinio projektas "Už ką nobelis?"DELFI turinio projektas "Už ką nobelis?"
DELFI turinio projektas "Už ką nobelis?"Karolina Jarmalytė
 
Spring grammar book
Spring grammar bookSpring grammar book
Spring grammar bookbklingler
 
Filming our teaser trailer
Filming our teaser trailerFilming our teaser trailer
Filming our teaser trailerGS6142
 
How to Drop shadow
How to Drop shadowHow to Drop shadow
How to Drop shadowRp95
 
Evidence of development 3
Evidence of development 3Evidence of development 3
Evidence of development 3GS6142
 
Distributors
DistributorsDistributors
DistributorsRp95
 
Editing poster, syncing voiceover
Editing poster, syncing voiceover Editing poster, syncing voiceover
Editing poster, syncing voiceover GS6142
 
Evidence of development 3
Evidence of development 3Evidence of development 3
Evidence of development 3GS6142
 
Wall Street: Money Never Sleeps
Wall Street: Money Never SleepsWall Street: Money Never Sleeps
Wall Street: Money Never SleepsGS6142
 
Key issuesandoutlookforlivestockfeedindustry[1]
Key issuesandoutlookforlivestockfeedindustry[1]Key issuesandoutlookforlivestockfeedindustry[1]
Key issuesandoutlookforlivestockfeedindustry[1]leeyj0213
 

Destaque (20)

Pert.5 sinkronisasi dan deadlock
Pert.5 sinkronisasi dan deadlockPert.5 sinkronisasi dan deadlock
Pert.5 sinkronisasi dan deadlock
 
Editing poster, syncing voiceover 26.11
Editing poster, syncing voiceover 26.11Editing poster, syncing voiceover 26.11
Editing poster, syncing voiceover 26.11
 
DELFI turinio projektas "Už ką nobelis?"
DELFI turinio projektas "Už ką nobelis?"DELFI turinio projektas "Už ką nobelis?"
DELFI turinio projektas "Už ką nobelis?"
 
Christmas Blessings
Christmas BlessingsChristmas Blessings
Christmas Blessings
 
Amplitude modulation Simulation
Amplitude modulation SimulationAmplitude modulation Simulation
Amplitude modulation Simulation
 
Spring grammar book
Spring grammar bookSpring grammar book
Spring grammar book
 
Bab 3
Bab 3Bab 3
Bab 3
 
Filming our teaser trailer
Filming our teaser trailerFilming our teaser trailer
Filming our teaser trailer
 
How to Drop shadow
How to Drop shadowHow to Drop shadow
How to Drop shadow
 
Abecedario bn
Abecedario bnAbecedario bn
Abecedario bn
 
Evidence of development 3
Evidence of development 3Evidence of development 3
Evidence of development 3
 
Distributors
DistributorsDistributors
Distributors
 
Solutions part1
Solutions part1Solutions part1
Solutions part1
 
Editing poster, syncing voiceover
Editing poster, syncing voiceover Editing poster, syncing voiceover
Editing poster, syncing voiceover
 
ConnectIn
ConnectInConnectIn
ConnectIn
 
Evidence of development 3
Evidence of development 3Evidence of development 3
Evidence of development 3
 
Pert.4 record
Pert.4 recordPert.4 record
Pert.4 record
 
Colors
ColorsColors
Colors
 
Wall Street: Money Never Sleeps
Wall Street: Money Never SleepsWall Street: Money Never Sleeps
Wall Street: Money Never Sleeps
 
Key issuesandoutlookforlivestockfeedindustry[1]
Key issuesandoutlookforlivestockfeedindustry[1]Key issuesandoutlookforlivestockfeedindustry[1]
Key issuesandoutlookforlivestockfeedindustry[1]
 

Semelhante a TREE MANIPULASI

Semelhante a TREE MANIPULASI (15)

9
99
9
 
Bab 9 tree
Bab 9 treeBab 9 tree
Bab 9 tree
 
Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)
 
Pert.5 linked list
Pert.5 linked listPert.5 linked list
Pert.5 linked list
 
Laporan sementara bab 1 (tree)
Laporan sementara bab 1 (tree)Laporan sementara bab 1 (tree)
Laporan sementara bab 1 (tree)
 
Asd sesi tree part1
Asd sesi tree part1Asd sesi tree part1
Asd sesi tree part1
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
 
Tree
TreeTree
Tree
 
Slide minggu 3 pertemuan 1 (struktur data1) [repariert]
Slide minggu 3 pertemuan 1 (struktur data1) [repariert]Slide minggu 3 pertemuan 1 (struktur data1) [repariert]
Slide minggu 3 pertemuan 1 (struktur data1) [repariert]
 
Biner
BinerBiner
Biner
 
12
1212
12
 
Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)Struktur data 05 (bs avl tree)
Struktur data 05 (bs avl tree)
 
Algoritma dan Struktur Data - pohon biner
Algoritma dan Struktur Data - pohon binerAlgoritma dan Struktur Data - pohon biner
Algoritma dan Struktur Data - pohon biner
 
Algoritma dan Struktur Data - Pohon Biner
Algoritma dan Struktur Data - Pohon BinerAlgoritma dan Struktur Data - Pohon Biner
Algoritma dan Struktur Data - Pohon Biner
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_list
 

Mais de Ical Militanmannojack (20)

Pert.11 linux
Pert.11 linuxPert.11 linux
Pert.11 linux
 
Pert.10 manajemen disk
Pert.10 manajemen diskPert.10 manajemen disk
Pert.10 manajemen disk
 
Pert.9 input output
Pert.9 input outputPert.9 input output
Pert.9 input output
 
Pert.8 memori virtual
Pert.8 memori virtualPert.8 memori virtual
Pert.8 memori virtual
 
Pert.7 memori
Pert.7 memoriPert.7 memori
Pert.7 memori
 
Pert.6 deadlock lanjutan
Pert.6 deadlock lanjutanPert.6 deadlock lanjutan
Pert.6 deadlock lanjutan
 
Pert.12 modul kernel linux
Pert.12 modul kernel linuxPert.12 modul kernel linux
Pert.12 modul kernel linux
 
Pert.4 proses dan thread lanjutan
Pert.4 proses dan thread lanjutanPert.4 proses dan thread lanjutan
Pert.4 proses dan thread lanjutan
 
Pert.2 proteksi perangkat keras
Pert.2 proteksi perangkat kerasPert.2 proteksi perangkat keras
Pert.2 proteksi perangkat keras
 
Pert.1 pengantar sistem operasi
Pert.1 pengantar sistem operasiPert.1 pengantar sistem operasi
Pert.1 pengantar sistem operasi
 
Pert.3 proses dan thread
Pert.3 proses dan threadPert.3 proses dan thread
Pert.3 proses dan thread
 
11
1111
11
 
10
1010
10
 
7
77
7
 
Pert.3 array
Pert.3  arrayPert.3  array
Pert.3 array
 
Pert.6 stack
Pert.6 stackPert.6 stack
Pert.6 stack
 
Pert.2 konsep dan defenisi data
Pert.2  konsep dan defenisi dataPert.2  konsep dan defenisi data
Pert.2 konsep dan defenisi data
 
Analisis desain sistem informasi ppt.12
Analisis desain sistem informasi ppt.12Analisis desain sistem informasi ppt.12
Analisis desain sistem informasi ppt.12
 
Analisis desain sistem informasi ppt.11
Analisis desain sistem informasi ppt.11Analisis desain sistem informasi ppt.11
Analisis desain sistem informasi ppt.11
 
Analisis desain sistem informasi ppt.10
Analisis desain sistem informasi ppt.10Analisis desain sistem informasi ppt.10
Analisis desain sistem informasi ppt.10
 

TREE MANIPULASI

  • 1. Manipulasi Tree 1 Nurdiansah PTIK 09 UNM 12/10/2012
  • 2. Tree 2  Kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang membentuk layaknya struktur sebuah pohon.  Struktur pohon adalah suatu cara merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-node dari atas ke bawah.  Suatu struktur data yang tidak linier yang menggambarkan hubungan yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya. Nurdiansah PTIK 09 UNM 12/10/2012
  • 3. Cont’… 3  Tree Statik : isi node-nodenya tetap karena bentuk pohonnya sudah ditentukan.  Tree Dinamik : isi nodenya berubah-ubah karena proses penambahan (insert) dan penghapusan (delete) Nurdiansah PTIK 09 UNM 12/10/2012
  • 4. Node Root 4  Node root dalam sebuah tree adalah suatu node yang memiliki hiarki tertinggi dan dapat juga memiliki node-node anak. Semua node dapat ditelusuri dari node root tersebut.  Node root adalah node khusus yang tercipta pertama kalinya.  Node-node lain di bawah node root saling terhubung satu sama lain dan disebut subtree Nurdiansah PTIK 09 UNM 12/10/2012
  • 5. Implementasi Tree 5  Contoh penggunaan struktur pohon :  Silsilah keluarga  Parse Tree (pada compiler)  Struktur File  Pertandingan Nurdiansah PTIK 09 UNM 12/10/2012
  • 6. Silsilah Keluarga 6 Nurdiansah PTIK 09 UNM 12/10/2012
  • 7. Parse tree 7 Nurdiansah PTIK 09 UNM 12/10/2012
  • 8. Cont’… 8 Nurdiansah PTIK 09 UNM 12/10/2012
  • 9. Representasi Tree 9 Nurdiansah PTIK 09 UNM 12/10/2012
  • 10. Representasi Tree 10  Notasi Tingkat  Notasi Kurung  (A(B(D,E(I,J)),C(F,G,H))) Nurdiansah PTIK 09 UNM 12/10/2012
  • 11. Terminologi Tree 11 Nurdiansah PTIK 09 UNM 12/10/2012
  • 12. Sebuah Tree 12 Nurdiansah PTIK 09 UNM 12/10/2012
  • 13. Jenis Tree 13  Binary Tree  Suatu tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah.  Tiap node dalam binary tree hanya boleh memiliki paling banyak dua child. Nurdiansah PTIK 09 UNM 12/10/2012
  • 14. Cont’… 14 Nurdiansah PTIK 09 UNM 12/10/2012
  • 15. Cont’… 15 Nurdiansah PTIK 09 UNM 12/10/2012
  • 16. Cont’… 16 Nurdiansah PTIK 09 UNM 12/10/2012
  • 17. Cont’… 17 Nurdiansah PTIK 09 UNM 12/10/2012
  • 18. Node pada binary tree 18  Jumlah maksimum node pada setiap tingkat adalah 2n  Node pada binary tree maksimum berjumlah 2n-1 Nurdiansah PTIK 09 UNM 12/10/2012
  • 19. Implementasi Program 19  Tree dapat dibuat dengan menggunakan linked list secara rekursif.  Linked list yang digunakan adalah double linked list non circular  Data yang pertama kali masuk akan menjadi node root.  Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari node root, sedangkan jika lebih besar dari data node root, akan masuk dan menempati node di sebelah kanan node root. Nurdiansah PTIK 09 UNM 12/10/2012
  • 20. Implementasi Program 20 Nurdiansah PTIK 09 UNM 12/10/2012
  • 21. Operasi-operasi Tree 21  Create: membentuk sebuah tree baru yang kosong.  pohon = NULL;  Clear: menghapus semua elemen tree.  pohon = NULL;  Empty: mengetahui apakah tree kosong atau tidak  int isEmpty(Tree *pohon){  if(pohon == NULL) return 1;  else return 0;  } Nurdiansah PTIK 09 UNM 12/10/2012
  • 22. Operasi - Operasi Tree 22  Insert: menambah node ke dalam Tree secara rekursif. Jika data yang akan dimasukkan lebih besar daripada elemen root, maka akan diletakkan di node sebelah kanan, sebaliknya jika lebih kecil maka akan diletakkan di node sebelah kiri. Untuk data pertama akan menjadi elemen root.  Find: mencari node di dalam Tree secara rekursif sampai node tersebut ditemukan dengan menggunakan variable bantuan ketemu. Syaratnya adalah tree tidak boleh kosong.  Traverse: yaitu operasi kunjungan terhadap node-node dalam pohon dimana masing-masing node akan dikunjungi sekali.  Count: menghitung jumlah node dalam Tree  Height : mengetahui kedalaman sebuah Tree  Find Min dan Find Max : mencari nilai terkecil dan terbesar pada Tree  Child : mengetahui anak dari sebuah node (jika punya) Nurdiansah PTIK 09 UNM 12/10/2012
  • 23. Jenis Transverse 23  PreOrder: cetak node yang dikunjungi, kunjungi left, kunjungi right  InOrder: kunjungi left, cetak node yang dikunjungi, kunjungi right  PostOrder: kunjungi left, kunjungi right, cetak node yang dikunjungi Nurdiansah PTIK 09 UNM 12/10/2012
  • 24. Ilustrasi Insert 24 Nurdiansah PTIK 09 UNM 12/10/2012
  • 25. Ilustrasi Insert 25  4. insert(left,3) Nurdiansah PTIK 09 UNM 12/10/2012
  • 26. Recursive Insert 26 void tambah(Tree **root,int databaru){ if((*root) == NULL){ Tree *baru; baru = new Tree; baru->data = databaru; baru->left = NULL; baru->right = NULL; (*root) = baru; (*root)->left = NULL; (*root)->right = NULL; } else if(databaru < (*root)->data) tambah(&(*root)->left,databaru); else if(databaru > (*root)->data) tambah(&(*root)->right,databaru); else if(databaru == (*root)->data) printf("Data sudah ada!"); } Nurdiansah PTIK 09 UNM 12/10/2012
  • 27. Ilustrasi Kunjungan 27 Nurdiansah PTIK 09 UNM 12/10/2012
  • 28. Ilustrasi Kunjungan 28 Nurdiansah PTIK 09 UNM 12/10/2012
  • 29. Ilustrasi Kunjungan 29 Nurdiansah PTIK 09 UNM 12/10/2012
  • 30. Ilustrasi Kunjungan 30 Kunjungan LevelOrder Hasil kunjungan: “ABCDEFGHI” Algoritma: Siapkan antrian yang kosong Inisialisasi: masukkan root ke dalam antrian Iterasi: selama Antrian tidak kosong, lakukan: Kunjungi elemen pada antrian Masukkan node->kiri dan node->kanan ke dalam antrian asal node tersebut tidak NULL. Keluarkan elemen pertama pada antrian Nurdiansah PTIK 09 UNM 12/10/2012
  • 31. Level Order 31 -Masukkan root ke antrian Antrian : 1 1 -Kunjungi root (1), masukkan node kiri dan kanan Antrian : 1, 2, 3 -Keluarkan antrian terdepan (node 1) Antrian : 2, 3 2 3 -Kunjungi node 2, masukkan 4 dan 5 Antrian : 2, 3, 4, 5 -Keluarkan node terdepan (node 2) Antrian : 3, 4, 5 -Kunjungi node 3, masukkan 6 dan 7 4 5 6 7 Antrian : 3, 4, 5, 6, 7 -Keluarkan antrian terdepan (node 3) Antrian : 4, 5, 6, 7 -Kunjungi node 4, tidak ada anak, keluarkan (4) -Kunjungi node 5, tidak ada anak, keluarkan (5) -Kunjungi node 6, tidak ada anak, keluarkan (6) Nurdiansah PTIK 09 UNM -Kunjungi node 7, tidak ada anak, keluarkan (7) 12/10/2012
  • 32. Level Order pseudocode 32 void LevelOrder(Tree *root) { Queue queue; Enqueue(queue,root); while(isEmpty(queue) != 1) { Tree n = GetQueue(); //visit print(n->data); if(n->left!=NULL) Enqueue(n->left); //Enqueue if exists if(n->right!=NULL) Enqueue(n->right); //Enqueue if exists Dequeue(queue); //out } } Nurdiansah PTIK 09 UNM 12/10/2012
  • 33. Contoh implementasi 33  Misalkan suatu ekspresi berikut: 3 + 2 * 5 – 4 Nurdiansah PTIK 09 UNM 12/10/2012
  • 34. Searching in Tree 34 Tree *cari(Tree *root,int data){ if(root==NULL) return NULL; else if(data < root->data) return (cari(root->left,data)); else if(data > root->data) return (cari(root->right,data)); else if(data == root->data) return root; } Pencarian dilakukan secara rekursif, dimulai dari node root, jika data yang dicari lebih kecil daripada data node root, maka pencarian dilakukan di sub node sebelah kiri, sedangkan jika data yang dicari lebih besar daripada data node root, maka pencarian dilakukan di sub node sebelah kanan, jika data yang dicari sama dengan data suatu node berarti kembalikan node tersebut dan berarti data ditemukan. Nurdiansah PTIK 09 UNM 12/10/2012
  • 35. Ilustrasi Searching 35 Nurdiansah PTIK 09 UNM 12/10/2012
  • 36. Keterangan Searching 36  Root = 6 dan 8 > 6, maka akan dicari di sub node bagian kanan root.  Root = 10 dan 8 < 10, maka akan dicari di sub node bagian kiri root.  Root = 7 dan 8 > 7, maka akan dicari di sub node bagian kanan root.  Root = 8, berarti 8 = 8, maka akan dikembalikan node tersebut dan dianggap ketemu! Nurdiansah PTIK 09 UNM 12/10/2012
  • 37. Jumlah Node Tree 37 int count(Tree *root) { if (root == NULL) return 0; return count(root->left) + count(root->right) + 1; } Penghitungan jumlah node dalam tree dilakukan dengan cara mengunjungi setiap node, dimulai dari root ke subtree kiri, kemudian ke subtree kanan dan masing-masing node dicatat jumlahnya, dan terakhir jumlah node yang ada di subtree kiri dijumlahkan dengan jumlah node yang ada di subtree kanan ditambah 1 yaitu node root. Nurdiansah PTIK 09 UNM 12/10/2012
  • 38. Kedalaman (height) Node Tree 38 int height(Tree *root) { if (root == NULL) return -1; int u = height(root->left), v = height(root->right); if (u > v) return u+1; else return v+1; } Penghitungan kedalaman dihitung dari setelah root, yang dimulai dari subtree bagian kiri kemudian ke subtree bagian kanan. Untuk masing-masing kedalaman kiri dan kanan akan dibandingkan, jika ternyata subtree kiri lebih dalam, maka yang dipakai adalah jumlah kedalaman subtree kiri, demikian sebaliknya. Hal ini didasarkan pada prinsip binary tree, dimana tree-nya selalu memiliki maksimal 2 node anak. Nurdiansah PTIK 09 UNM 12/10/2012
  • 39. Find Min Node 39 Tree *FindMin(Tree *root) { if(root == NULL) return NULL; else if(root->left == NULL) return root; else return FindMin(root->left); } Penggunaan: Tree *t = FindMin(pohon); Nurdiansah PTIK 09 UNM 12/10/2012
  • 40. Mencari Leaf (daun) 40 void leaf(Tree *root){ if(root == NULL) printf("kosong!"); if(root->left!=NULL) leaf(root->left); if(root->right!=NULL) leaf(root->right); if(root->right == NULL && root->left == NULL) printf("%d ",root->data); } Nurdiansah PTIK 09 UNM 12/10/2012
  • 41. Konversi Tree Biasa ke Binary Tree 41 Anak pertama menjadi anak kiri, anak ke-2 menjadi cucu kanan, ke-3 jadi cicit kanan dst Nurdiansah PTIK 09 UNM 12/10/2012
  • 42. Pembentukan Tree dari Preorder 42  Baca hasil Preorder dari paling kanan ke kiri untuk mencari node yang derajatnya lebih dari 0, kemudian ambil node sebanyak derajatnya ke kanan. Hilangkan node yang terambil tersebut dari hasil Preorder  Lanjutkan langkah 1, dan seterusnya sampai semua hasil traversal habis Nurdiansah PTIK 09 UNM 12/10/2012
  • 43. Contoh 43  Preorder: U V W X Y  Derajat: 2 2 0 0 0  Derajat bukan nol yang ditemukan pertama dari kanan adalah V, ambil 2 node kekanan, W dan X, hilangkan.  Lanjutkan, ketemu U berderajat 2, berarti U punya anak V dan Y Nurdiansah PTIK 09 UNM 12/10/2012
  • 44. 44 TO BE CONTINUE… Nurdiansah PTIK 09 UNM 12/10/2012