Binary Tree
Sub Topik Penjelasan Tree Istilah pada tree Binary Tree Jenis Binary Tree ADT Binary tree
Tree (Pohon)
Real World leaves branches root
Computer Scientist’s View root leaves branches nodes
Definisi Kumpulan node yang saling terhubung secara hirarki. Hirarki = bertingkat. Tiap node dapat berisi data dan link (penghubung) ke node lainnya Tiap node memiliki satu induk, kecuali node root (akar) yang tidak memiliki induk. Tiap node dapat memiliki anak dalam jumlah berapapun.
Linked list dan Tree Linked list linear/serial data Contoh : nama-nama mahasiswa dalam satu kelas. Tree non linear/hierachically data Contoh : tingkatan pegawai dalam perusahaan.
Contoh Tree Mis. : Struktur organisasi sebuah perusahaan
Contoh Tree Mis. : Daftar isi sebuah buku
Contoh Tree Mis. : File system
Tree (Pohon) Root adalah node yang memiliki hirarki tertinggi. Subtree (pohon anak) adalah beberapa node yang tersusun hirarki yang ada dibawah root.
Root and Subtrees root Object Number Throwable OutputStream Integer Double Exception FileOutputStream RuntimeException
Tree (Pohon) Level adalah posisi hirarki dari sebuah node. Untuk root bisa diberikan level 0 atau 1. Leaf (Daun) adalah node yang tidak memiliki anak atau node yang berada pada hirarki paling bawah. Height (tinggi)/depth adalah jumlah level dari sebuah tree.
Leaves Object OutputStream Number Throwable FileOutputStream Integer Double Exception RuntimeException
Node Degree Object Number Throwable OutputStream Integer Double Exception FileOutputStream RuntimeException 3 2 1 1 1
Level Level 3 Object Number Throwable OutputStream Integer Double Exception FileOutputStream RuntimeException Level 4 Level 2 Level 1 Level 1 Level 2 Level 3 Level 4
Contoh Tree (Pohon) R Root/Akar Level 0 S T Level 1 X U V W Level 2 Daun/ Leaf Level 3 Y Z 17
Istilah Tree (Pohon)
Latihan Ancestor (F)? Descendant (B)? Parent (I)? Child (C)? Sibling (G)? Size? Height? Root? Leaf? Degree (C)?
Tree (Pohon) Dimana, Ancestor (F) = C,A Descendant (B) = D,E Parent (I) = H Child (A) = B,C Sibling (F) = G,H Size = 9 Height = 3/4 Root = A Leaf = D,E,F,G,I Degree (C) = 3
Binary Tree
Gambar Binary Trees
Binary Tree Tiap node pada binary tree hanya boleh memiliki paling banyak dua child. Sehingga hanya ada dua subtree pada binary tree yang disebut sebagai left dan right subtrees.
Tree dan Binary Tree Pada binary tree nilai degree tidak lebih dari 2, sedangkan pada tree tidak terbatas. Sub tree pada binary harus terurut (ordered), sedangkan pada tree tidak (un-ordered).
Jenis Binary Tree Berdasarkan subtree binary tree dibedakan menjadi 4 jenis: Full Binary Tree Complete Binary Tree Incomplete Binary Tree (Unbalanced Tree) Skewed Binary Tree
Jenis Tree (Full Binary Tree) Semua node (kecuali leaf) memiliki nol atau 2 anak dan tiap subtree memiliki panjang path yang sama. Disebut juga maximum binary tree.
Maximum Binary Tree
Jenis Tree (Complete Binary Tree) Seluruh node sebelah kiri terisi seluruhnya. Node sebelah kanan pada level n-1 ada yang kosong.
Complete Binary Tree H D K B F J L I A C E G
Incomplete Binary Tree Gambar a Gambar b
Jenis Tree (Skewed Binary Tree) Binary tree yang semua nodenya (kecuali leaf) hanya memiliki satu anak. Disebut juga minimum binary tree. Left Skewed Right Skewed
Binary Tree Representation
Representation Array representation Linked list representation
ADT BinaryTree public interface BinaryTree { public boolean isEmpty(); public Object root(); public void makeTree(Object root, Object left, Object right); public BinaryTree removeLeftSubtree(); public BinaryTree removeRightSubtree(); public void preOrder(Method visit); public void inOrder(Method visit); public void postOrder(Method visit); public void levelOrder(Method visit); }
Array Representation
Akses Elemen Posisi node dapat ditentukan berdasarkan rumus berikut : Anak kiri dari node i berada pada indeks : 2*i+1 Anak kanan dari node i berada pada indeks : 2*i+2 Struktur Data - Tree
Penambahan array size 1 node (root) = 20 Root + node pada level 1 = 20 +21 Root + node pada level 1 & 2 = 20 +21+22 Root + node pada level 1,2,3 = 20 +21 +22 +23 Root + node pada level 1,2,..n=20+21+22+...+2n
Array Representation tree[] b a c d e f g h i j 1 2 3 4 5 6 7 8 9 10 2 5 10 a b c d e f g h i j 5 10
Right-Skewed Binary Tree 1 a b 1 3 c 7 d 15 3 7 15 tree[] 5 10 a - b c 15 d 5 10 15
Linked List Representation
Class BinaryTreeNode class BinaryTreeNode { Object element; BinaryTreeNode leftChild; // left subtree BinaryTreeNode rightChild;// right subtree // constructors and any other methods come here }
Contoh Representasi Linked List b d f e g h leftChild element rightChild root root leftChild element rightChild
Binary Tree Traversal
Definisi Penelusuran seluruh node pada binary tree. Metode : Preorder Inorder Postorder Level order
Preorder Traversal public static void preOrder(BinaryTreeNode t) { if (t != null) visit(t); preOrder(t.leftChild); preOrder(t.rightChild); } t is the root of the subtree being traversed.
PreOrder Traversal Preorder traversal Cetak data pada root Secara rekursif mencetak seluruh data pada subpohon kiri Secara rekursif mencetak seluruh data pada subpohon kanan
Preorder Example (visit = print) b c a b c
Preorder Example (visit = print) b c d e f g h i j During the traversal, t starts at the root, moves to the left child b of the root, then to the left child d of b. When the traversal of the left subtree of b is complete, t, once again, points to the node b. The t moves into the right subtree of b. When the traversal of this right subtree is complete, t again points to b. Following this, t points to a. We see that t points to every node in the binary tree three times – once when you get to the node from its parent (or in the case of the root, t is initially at the root), once when you return from the left subtree of the node, and once when you return from the node’s right subtree. Of these three times that t points to a node, the node is visited the first time. a b d g h e i c f j
Preorder Of Expression Tree + a b - c d e f * / / * + a b - c d + e f Gives prefix form of expression!
Inorder Traversal public static void inOrder(BinaryTreeNode t) { if (t != null) inOrder(t.leftChild); visit(t); inOrder(t.rightChild); }
InOrder Traversal Inorder traversal Secara rekursif mencetak seluruh data pada subpohon kiri Cetak data pada root Secara rekursif mencetak seluruh data pada subpohon kanan
Inorder Example (visit = print) b c b a c
Inorder Example (visit = print) b c d e f g h i j g d h b e i a f j c
Inorder By Projection (Squishing) a b c d e f g h i j g d h b e i a f j c
Inorder Of Expression Tree + a b - c d e f * / e a + b * c d / f - Gives infix form of expression (sans parentheses)!
Postorder Traversal public static void postOrder(BinaryTreeNode t) { if (t != null) postOrder(t.leftChild); postOrder(t.rightChild); visit(t); }
Postorder Traversal Postorder traversal Secara rekursif mencetak seluruh data pada subpohon kiri Secara rekursif mencetak seluruh data pada subpohon kanan Cetak data pada root
Postorder Example (visit = print) b c b c a
Postorder Example (visit = print) b c d e f g h i j g h d i e b j f c a
Postorder Of Expression Tree + a b - c d e f * / a b + c d - * e f + / Gives postfix form of expression!
Traversal Applications b c d e f g h i j Make a clone using postorder traversal … clone the left subtree, clone the right subtree, clone the root in the visit step. Determine height using postorder traversal … determine the height of the left subtree, determine the height of the right subtree, in the visit step add 1 to the max of the already determined heights of the left and right subtrees. Determine number of nodes using preorder, inorder, or postorder traversal … initialize a counter to 0, add 1 to the counter in the visit step. Make a clone. Determine height. Determine number of nodes.
Level Order Let t be the tree root. while (t != null) { visit t and put its children on a FIFO queue; remove a node from the FIFO queue and call it t; // remove returns null when queue is empty }
Latihan Telusuri pohon biner berikut dengan menggunakan metode pre, in, post, dan level traversal.
Latihan 1 a. b.
Latihan 2
Level-Order Example (visit = print) b c d e f g h i j a b c d e f g h i j
Contoh : Pohon Ekspresi
PreOrder, PostOrder, InOrder Node, left, right Ekspresi Prefix : ++a*bc*+*defg Post-order : Ekspresi Postfix : abc*+de*f+g*+ In-order : Ekspresi Infix : a+b*c+d*e+f*g
Pustaka Sartaj Sahni , “Data Structures & Algorithms”, Presentation L20-24. Mitchell Waite, “Data Structures & Algorithms in Java”, SAMS, 2001