Presentation is loading. Please wait.

Presentation is loading. Please wait.

Binary Search Trees (10.1) CSE 2011 Winter 2011 15 November 2015.

Similar presentations


Presentation on theme: "Binary Search Trees (10.1) CSE 2011 Winter 2011 15 November 2015."— Presentation transcript:

1 Binary Search Trees (10.1) CSE 2011 Winter 2011 15 November 2015

2 Dictionary ADT (9.5.1) The dictionary ADT models a searchable collection of key- element items The main operations of a dictionary are searching, inserting, and deleting items Multiple items with the same key are allowed Applications: –address book –credit card authorization –SIN database –student database Dictionary ADT methods: get(k): if the dictionary has an item with key k, returns its element, else, returns NULL getAll(k): returns an iterator of entries with key k put(k, o): inserts item (k, o) into the dictionary remove(k): if the dictionary has an item with key k, removes it from the dictionary and returns its element, else returns NULL removeAll(k): remove all entries with key k; return an iterator of these entries. size(), isEmpty() 2

3 Binary Search Trees A binary search tree is a binary tree storing keys (or key-element pairs) at its internal nodes and satisfying the following property: Let u, v, and w be three nodes such that u is in the left subtree of v and w is in the right subtree of v. We have key(u)  key(v)  key(w) External nodes (dummies) do not store items (non- empty proper binary trees, for coding simplicity) An inorder traversal of a binary search trees visits the keys in increasing order The left-most child has the smallest key The right-most child has the largest key 6 92 418 3

4 4 Example of BST A binary search tree Not a binary search tree

5 5 More Examples of BST Average depth of a node is O(logN). Maximum depth of a node is O(N). Where is the smallest key? largest key? The same set of keys may have different BSTs.

6 6 Inorder Traversal of BST Inorder traversal of BST prints out all the keys in sorted order. Inorder: 2, 3, 4, 6, 7, 9, 13, 15, 17, 18, 20

7 7 Searching BST If we are searching for 15, then we are done. If we are searching for a key < 15, then we should search in the left subtree. If we are searching for a key > 15, then we should search in the right subtree.

8 8

9 Search Algorithm To search for a key k, we trace a downward path starting at the root The next node visited depends on the outcome of the comparison of k with the key of the current node If we reach a leaf, the key is not found and we return v (where the key should be if it will be inserted) Example: TreeSearch(4, T.root()) Running time: ? Algorithm TreeSearch( k, v ) if T.isExternal (v) return (v); // or return NO_SUCH_KEY if k  key(v) return TreeSearch( k, T.left(v) ) else if k  key(v) return v else { k  key(v) } return TreeSearch( k, T.right(v) ) 6 9 2 4 1 8    9

10 Insertion (distinct keys) To perform operation insertItem(k, o), we search for key k Assume k is not already in the tree, and let w be the leaf reached by the search We insert k at node w and expand w into an internal node using insertAtExternal(w, (k,e)) Example: insertAtExternal(w, (5,e)) with e having key 5 Running time: ? 6 92 418 6 9 2 4 18 5    w w 10

11 Insertion Algorithm (distinct keys) Algorithm TreeInsert( k, e, v ) { w = TreeSearch( k, v ); T.insertAtExternal( w, k, e ); return w; } Algorithm insertAtExternal( w, k, e ) { if ( T.isExternal( w ) { make w an internal node, store k and e into w; add two dummy nodes (leaves) as w’s children; } else { error condition }; } First call: TreeInsert( 5, e, T.root( ) ) 11

12 Insertion (duplicate keys) Insertion with duplicate keys Example: insert(2) Call TreeSearch(k, leftChild(w)) to find the leaf node for insertion Can insert to either the left subtree or the right subtree (call TreeSearch(k, rightChild(w)) Running time: ? Homework: implement method getAll(k) 12

13 Insertion Algorithm (duplicate keys) Algorithm TreeInsert( k, e, v ) { w = TreeSearch( k, v ); if k == key(w) // key exists return TreeInsert( k, e, T.left( w ) ); // *** T.insertAtExternal( w, k, e ); return w; } First call: TreeInsert( 2, e, T.root() ) ***Note: if inserting the duplicate key into the left subtree, keep searching the left subtree after a key has been found. 13

14 Deletion To perform operation removeElement( k ), we search for key k Assume key k is in the tree, and let v be the node storing k Two cases: –Case 1: v has no children –Case 2: v has exactly one child –Case 3: v has two children

15 Deletion: Case 1 Case 1: v has no children We simply remove v and its 2 dummy leaves. Replace v by a dummy node. Example: remove 5 6 9 2 4 18 5 6 9 2 18 15

16 Deletion: Case 2 Case 1: v has exactly one child v’ s parent will “adopt” v’ s child. We connect v’ s parent to v’ s child, effectively removing v and the dummy node w from the tree. Done by method removeExternal ( w ) Example: remove 4 6 9 2 4 18 5 v w 6 9 2 5 18 16

17 Deletion: Case 3 Case 3: v has two children (and possibly grandchildren, great-grandchildren, etc.) Identify v ’s “heir”: either one of the following two nodes: –the node x that immediately precedes v in an inorder traversal (right-most node in v ’s left subtree) –the node x that immediately follows v in an inorder traversal (left-most node in v ’s right subtree) Two steps: –copy content of x into node v (heir “inherits” node v ); –remove x from the tree (use either case 1 or case 2 above).

18 Deletion: Case 3 Example Example: remove 3 Heir = ? Running time of deletion algorithm: ? Homework: implement removeAll(k) 3 1 8 6 9 5 v x 2 5 1 8 6 9 v 2 18

19 Notes Two steps of case 3: –copy content of x into node v (heir “inherits” node v ); –remove x from the tree if x has no child: call case 1 if x has one child: call case 2 x cannot have two children (why?) Both cases 1 and 2 can be merged into one and implemented by method removeExternal(). 19

20 Performance Consider a dictionary with n items implemented by means of a binary search tree of height h –the space used is O(n) –methods get(k), put() and remove(k) take O(h) time The height h is O(n) in the worst case and O(log n) in the best case 20

21 Next time … AVL trees (10.2) BST Java code: section 10.1.3 21


Download ppt "Binary Search Trees (10.1) CSE 2011 Winter 2011 15 November 2015."

Similar presentations


Ads by Google