Download presentation
Presentation is loading. Please wait.
Published byEgbert Wilkinson Modified over 8 years ago
1
IKI 10100: Data Structures & Algorithms Ruli Manurung (acknowledgments to Denny & Ade Azurat) 1 Fasilkom UI Ruli Manurung (Fasilkom UI)IKI10100: Lecture13 th Mar 2007 Tree
2
2 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Tree Data Structure Examples Terminology & Definition Binary Tree Tree Traversal Tree Iterators Outline
3
3 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 A tree represents a hierarchy, for example: Organizational structure of a company Trees: Some Examples
4
4 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Trees: Some Examples Table of contents of a book
5
5 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Trees: Some Examples File system (Unix, Windows, Internet)
6
6 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Trees: Terminology 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, or path length of E is 2 The height of the tree is 3 The degree of node B is 2 Property: |edges| = |nodes| - 1
7
7 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Trees: Viewed Recursively A sub-tree is also a tree!!
8
8 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Binary Trees Binary tree: tree with all internal nodes of degree 2 Recursive View: a binary tree is either empty an internal node (the root) and two binary trees (left subtree and right subtree)
9
9 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Binary Trees: An Example Arithmetic expression
10
10 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Binary Trees: Properties If we restrict that each parent can have two and only two children, then: |external nodes| = |internal nodes| + 1 |nodes at level i| 2 i |external nodes| 2 (height) height log 2 |external nodes| height log 2 |nodes| - 1 height |internal nodes| = (|nodes| - 1)/2
11
11 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Traversing Trees: Preorder Preorder Traversal Algorithm preOrder(v) “visit” node v for each child w of v do recursively perform preOrder(w) Example: reading a document from beginning to end
12
12 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Traversing Trees: Postorder Postorder Traversal Algorithm postOrder(v) for each child w of v do recursively perform postOrder(w) “visit” node v Example: du (disk usage) command in Unix
13
13 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Traversing Trees Algorithm evaluateExpression(v) if v is an external node return the variable stored at v else let o be the operator stored at v x evaluateExpression(leftChild(v)) y evaluateExpression(rightChild(v)) return x o y
14
14 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Traversing Trees: Inorder Inorder traversal of a binary tree Algorithm inOrder(v) recursively perform inOrder(leftChild(v)) “visit” node v recursively perform inOrder(rightChild(v)) Example: printing an arithmetic expression print “(“ before traversing the left subtree print “)” after traversing the right subtree
15
15 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 The BinaryNode in Java A tree is a collection of nodes: class BinaryNode { T element; /* Item stored in node */ BinaryNode left; BinaryNode right; } The tree stores a reference to the root node, which is the starting point. public class BinaryTree { private BinaryNode root; // Root node public BinaryTree() // Default constructor { root = null; }
16
16 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Think Recursively Computing the height of a tree is complex without recursion. The height of a tree is one more than the maximum of the heights of the subtrees. H T = max (H L +1, H R +1) HLHL HRHR H L +1 H R +1
17
17 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Routine to Compute Height Handle base case (empty tree) Use previous observation for recursive case. public static int height (BinaryNode t) { if (t == null) return 0; else return 1 + max(height (t.left), height (t.right)); }
18
18 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Running Time This strategy is a postorder traversal: information for a tree node is computed after the information for its children is computed. The running time of tree traversal is N times the cost of processing each node. Thus, the running time is linear because we do constant work for each node in the tree.
19
19 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Print Preorder class BinaryNode { void printPreOrder( ) { System.out.println( element ); // Node if( left != null ) left.printPreOrder( ); // Left if( right != null ) right.printPreOrder( ); // Right } class BinaryTree { public void printPreOrder( ) { if( root != null ) root.printPreOrder( ); }
20
20 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Print Postorder class BinaryNode { void printPostOrder( ) { if( left != null ) left.printPostOrder( ); // Left if( right != null ) right.printPostOrder( ); // Right System.out.println( element ); // Node } class BinaryTree { public void printPostOrder( ) { if( root != null ) root.printPostOrder( ); }
21
21 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Print Inorder class BinaryNode { void printInOrder( ) { if( left != null ) left.printInOrder( ); // Left System.out.println( element ); // Node if( right != null ) right.printInOrder( ); // Right } class BinaryTree { public void printInOrder( ) { if( root != null ) root.printInOrder( ); }
22
22 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Traversing Tree Pre-Order Post-OrderInOrder
23
23 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Exercise A tree contains Integer objects. Find the maximum value Find the total value
24
24 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Tree Iterator Class Can we implement traversal non-recursively? Recursion is implemented by using a stack. We can traverse non-recursively by maintaining the stack ourselves (emulate stack of activation records). Is a non-recursive approach faster than recursive approach? Possibly:we can place only the essentials, while the compiler places an entire activation record.
25
25 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Postorder Traversal using Stack Use stack to store the current state (nodes we have traversed but not yet completed) Similar to PC (program counter) in the activation record We “pop” each node three times, when: 0. about to make a recursive call to left subtree 1. about to make a recursive call to right subtree 2. about to process the current node itself
26
26 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Postorder Algorithm init: push root onto stack with state 0 advance: while (true) node X = pop from the stack switch (state X): case 0: push node X with state 1 push left child of X (if it exists) with state 0 case 1: push node X with state 2 push right child of X (if it exists) with state 0 case 2: visit/process node X
27
27 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Postorder Traversal: Stack States
28
28 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Exercise Create a non-recursive algorithm for inorder traversal using stack. Create a non-recursive algorithm for preorder traversal using stack.
29
29 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Inorder Traversal using Stack What are the states for inorder traversal? 0. about to make a recursive call to left subtree 1. about to process the current node 2. about to make a recursive call to right subtree
30
30 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Inorder Algorithm init: push root onto the stack with state 0 advance: while (true) node X = pop from the stack switch (state X): case 0: push node X with state 1 push left child of X (if it exists) with state 0 case 1: push node X with state 2 visit/process node X case 2: push right child of X (if it exists) with state 0
31
31 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Inorder Algorithm (improved) init: push root onto the stack with state 0 advance (optimize): while (true) node X = pop from the stack switch (state X): case 0: push node X with state 1 push left child of X (if it exists) with state 0 case 1: visit/process node X push right child of X (if it exists) with state 0
32
32 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Preorder Traversal using Stack What are the states for preorder traversal? 0. about to process the current node 1. about to make a recursive call to left subtree 2. about to make a recursive call to right subtree
33
33 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Preorder Algorithm init: push root onto the stack with state 0 advance: while (true) node X = pop from the stack switch (state X): case 0: push node X with state 1 visit/process the node X case 1: push node X with state 2 push left child of X (if it exists) with state 0 case 2: push right child of X (if it exists) with state 0
34
34 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Preorder Algorithm (improved) init: push root onto the stack advance (optimized): while (true) node X = pop from the stack visit/process node X push right child of X (if it exists) push left child of X (if it exists)
35
35 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Euler Tour Traversal Generic traversal of a binary tree The preorder, inorder, and postorder traversals are special cases of the Euler tour traversal “walk around” the tree and visit each node three times: on the left from below on the right
36
36 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Level-Order Traversal Visit root followed by its children from left to right and followed by their children. So we go down the tree level by level. Sequence: A - B - C - D - E - F - G - H - I
37
37 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Level-Order Traversal: Idea Using a queue instead of a stack Algorithm (similar to pre-order) init: enqueue the root into the queue while(true): node X = dequeue from the queue visit/process node X; enqueue left child of node X (if it exists); enqueue right child of node X (if it exists);
38
38 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Binary Tree: Properties Maximum number of nodes in a binary tree of height k is 2 k+1 -1. A full binary tree with height k is a binary tree which has 2 k+1 - 1 nodes. A complete binary tree with height k is a binary tree which has maximum number of nodes possible in levels 0 through k -1, and in (k -1)’th level all nodes with children are selected from left to right. Complete binary tree with n nodes can be shown by using an array, then for any node with index i, we have: Parent (i) is at i/2 if i 1; for i =1, we have no parent. Left-child (i ) is at 2i if 2i n. (else no left-child) Right-child (i ) is at 2i+1 if 2i +1 n (else no right-child)
39
39 Ruli Manurung (Fasilkom UI)IKI10100: Lecture 13 th Mar 2007 Summary Tree, Binary Tree In order to process the elements of a tree, we consider accessing the elements in certain order Tree traversal is a tree operation that involves "visiting” (or" processing") all the nodes in a tree. Depth First Search (DFS): Pre-order: Visit node first, pre-order all its subtrees from leftmost to rightmost. Inorder: Inorder the node in left subtree and then visit the root following by inorder traversal of all its right subtrees. Post-order: Post-order the node in left subtree and then post- order the right subtrees followed by visit to the node. Breadth First Search (BFS): Level-order: Visit root followed by its children from left to right and followed by their children. So we go down the tree level by level.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.