1 / 76

CSCE 210 Data Structures and Algorithms

CSCE 210 Data Structures and Algorithms. Prof. Amr Goneid AUC Part 5. Dictionaries(2): Binary Search Trees. Dictionaries(2): Binary Search Trees. The Dictionary Data Structure The Binary Search Tree (BST) Search, Insertion and Traversal of BST Removal of nodes from a BST

Télécharger la présentation

CSCE 210 Data Structures and Algorithms

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSCE 210Data Structures and Algorithms Prof. Amr Goneid AUC Part 5. Dictionaries(2): Binary Search Trees Prof. Amr Goneid, AUC

  2. Dictionaries(2): Binary Search Trees • The Dictionary Data Structure • The Binary Search Tree (BST) • Search, Insertion and Traversal of BST • Removal of nodes from a BST • Binary Search Tree ADT • Template Class Specification • Other Search Trees (AVL Trees) Prof. Amr Goneid, AUC

  3. Dictionaries(2): Binary Search Trees BST Prof. Amr Goneid, AUC

  4. 1.The Dictionary Data Structure • Simple containers such as tables, stacks and queues permit access of elements by position or order of insertion. • A Dictionary is a form of container that permits access by content. Prof. Amr Goneid, AUC

  5. The Dictionary Data Structure • A dictionary DS should support the following main operations: • Insert (D,x): Insert item x in dictionary D • Delete (D,x): Delete item x from D • Search (D,k): search for key k in D Prof. Amr Goneid, AUC

  6. The Dictionary Data Structure • Examples: • Unsorted arrays and Linked Lists:permit linear search • Sorted arrays:permit Binary search • Ordered Lists:permit linear search • Binary Search Trees (BST): fast support of all dictionary operations. • Hash Tables: Fast retrieval by hashing key to a position. Prof. Amr Goneid, AUC

  7. The Dictionary Data Structure There are 3 types of dictionaries: • Static Dictionaries — These are built once and never change. Thus they need to support search, but not insertion or deletion. These are better implemented using arrays or Hash tables with linear probing. • Semi-dynamic Dictionaries — These structures support insertion and search queries, but not deletion. These can be implemented as arrays, linked lists or Hash tables with linear probing. Prof. Amr Goneid, AUC

  8. The Dictionary Data Structure • Fully Dynamic Dictionaries — These need fast support of all dictionary operations. Binary Search Trees are best. Hash tables are also great for fully dynamic dictionaries as well, provided we use chaining as the collision resolution mechanism. Prof. Amr Goneid, AUC

  9. The Dictionary Data Structure • In the revision part R3, we present two dictionary data structures that support all basic operations. Both are linear structures and so employ linear search, i.e O(n). They are suitable for small to medium sized data. • The first uses a run-time array to implement an ordered list and is suitable if we know the maximum data size • The second uses a linked list and is suitable if we do not know the size of data to insert. Prof. Amr Goneid, AUC

  10. The Dictionary Data Structure • In the following, we present the design and implement a dictionary data structures that is based on the Binary Search Tree (BST). • This will be a Fully Dynamic Dictionary and basic operations are usually O(log n) Prof. Amr Goneid, AUC

  11. 2. The Binary Search Tree (BST) • A Binary Search Tree (BST) is a Dictionary implemented as a Binary Tree. It is a form of container that permits access by content. • It supports the following main operations: • Insert : Insert item in BST • Remove : Delete item from BST • Search : search for key in BST Prof. Amr Goneid, AUC

  12. v u w BST A BST is a binary tree that stores keys or key-data pairs in its nodes and has the following properties: • A key identifies uniquely the node (no duplicate keys) • If (u , v , w) are nodes such that (u) is any node in the left subtree of (v) and (w) is any node in the right subtree of (v) then: key(u) < key(v) < key(w) Prof. Amr Goneid, AUC

  13. Examples Of BST Prof. Amr Goneid, AUC

  14. Examples Of BST These are NOT BSTs. Prof. Amr Goneid, AUC

  15. 3. Search, Insertion & Traversal of BST Search (tree, target) if (tree is empty) target is not in the tree; else if (the target key is the root) target found in root; else if (target key smaller than the root’s key) search left sub-tree; else search right sub-tree; Prof. Amr Goneid, AUC

  16. Searching Algorithm(Pseudo Code) Searches for the item with same key as k in the tree (t). Bool search(t,k) { if (t is empty)return false; else if (k == key(t))return true; else if (k < key(t)) return search(tleft, k); else return search(tright, k); } Prof. Amr Goneid, AUC

  17. Searching for a key Search for the node containing e: Maximum number of comparisons is tree height, i.e. O(h) Prof. Amr Goneid, AUC

  18. Demo http://www.csanimated.com/animation.php?t=Binary_search_tree Prof. Amr Goneid, AUC

  19. Building a Binary Search Tree • Tree created from root downward • Item 1 stored in root • Next item is attached to left tree if value is smaller or right tree if value is larger • To insert an item into an existing tree, we must first locate the item’s parent and then insert Prof. Amr Goneid, AUC

  20. Algorithm for Insertion Insert (tree, new_item) if (tree is empty) insert new item as root; else if (root key matches item) skip insertion; (duplicate key) else if (new key is smaller than root) insert in left sub-tree; else insert in right sub-tree; Prof. Amr Goneid, AUC

  21. Insertion (Pseudo Code) Inserts key (k)in the tree (t) Bool insert(t, k) {if (t is empty) { create node containing (k)and attach to (t); return true; } else if (k == key(t)) return false; else if (k < key(t)) return insert(tleft, k); else return insert(tright, k); } Prof. Amr Goneid, AUC

  22. Example: Building a TreeInsert: 40,20,10,50,65,45,30 Prof. Amr Goneid, AUC

  23. Effect of Insertion Order • The shape of the tree depends on the order of insertion. Shape determines the height (h) of the tree. • Since cost of search is O(h), the insertion order will affect the search cost. • The previous tree is full, and h = log2(n+1)so that search cost is O(log2n) Prof. Amr Goneid, AUC

  24. Effect of Insertion Order • The previous tree would look like a linked list if we have inserted in the order 10,20,30,…. Its height would be h = n and its search cost would be O(n) O(log n) O(n) Prof. Amr Goneid, AUC

  25. Binary Search Tree Demo http://www.csanimated.com/animation.php?t=Binary_search_tree Prof. Amr Goneid, AUC

  26. Linked Representation • The nodes in the BST will be implemented as a linked structure: t 32 16 45 40 Prof. Amr Goneid, AUC

  27. Traversing a Binary Search Tree Recursive inorder traversal of tree with root (t) traverse ( t ) { if (t is not empty) traverse (tleft); visit (t); traverse (tright); } Prof. Amr Goneid, AUC

  28. Find Minimum Key Find the minimum key in a tree with root (t) Minkey ( t ) { if (tleft is not empty) return MinKey(tleft); else return key(t); } Prof. Amr Goneid, AUC

  29. Other Traversal Orders • Pre-order (a.k.a. Depth-First traversal) can be implemented using an iterative (non-recursive) algorithm. In this case, a stack is used • If the stack is replaced by a queue and left pointers are exchanged by right pointers, the algorithm becomes Level-order traversal (a.k.a. Breadth-First traversal) Prof. Amr Goneid, AUC

  30. Iterative Preorder Traversal void iterative_preorder ( ) { t = root; Let s be a stack s.push (t); while(!s.stackIsEmpty()) { s.pop(t); process(t->key); if ( t right is not empty) s.push(t right); if ( t left is not empty) s.push(t left); } } Prof. Amr Goneid, AUC

  31. Pre-Order Traversal Traversal order: {D,B,A,C,F,E,G} 1 D 2 5 B F 3 4 A C E G 6 7 Prof. Amr Goneid, AUC

  32. Level Order Traversal void levelorder ( ) { t = root; Let q be a queue; q.enqueue(t); while(!q.queueIsEmpty()) { q.dequeue(t); process(t->key); if ( t left is not empty) q.enqueue(t left); if ( t right is not empty) q.enqueue(t right); } } Prof. Amr Goneid, AUC

  33. Level-Order Traversal Traversal order: {D,B,F,A,C,E,G} 1 D 2 3 B F 4 6 7 5 A C E G Prof. Amr Goneid, AUC

  34. 4. Removal of Nodes from a BST Prof. Amr Goneid, AUC

  35. Deleting a ROOT Node Prof. Amr Goneid, AUC

  36. Deleting a ROOT Node Prof. Amr Goneid, AUC

  37. Deleting a ROOT Node (Special Case) Prof. Amr Goneid, AUC

  38. Deleting a ROOT Node (Alternative) Prof. Amr Goneid, AUC

  39. Deleting an Internal Node Prof. Amr Goneid, AUC

  40. Search for Parent of a Node To delete a node, we need to find its parent. To search for the parent (p) of a node (x) with key (k) in tree (t): Set x = t; p = null; found = false; While (not found) and (x is not empty) { if k < key(x) descend left (i.e. set p = x; x = xleft) else if k > key(x) descend right (i.e. set p = x;x = xright) else found = true } Notice that: P is null if (k) is in the root or if the tree is empty. If (k) is not found, p points to what should have been its parent. Prof. Amr Goneid, AUC

  41. Algorithm to remove a Node Let k = key to remove its node t = pointer to root of tree x = location where k is found p = parent of a node sx = inorder successor of x s = child of x Prof. Amr Goneid, AUC

  42. Algorithm to remove a Node Remove (t,k) { Search for (k) and its parent; If not found, return; else it is found at (x) with parent at (p): Case (x) has two children: Find inorder successor (sx) and its parent (p); Copy contents of (sx) into (x); Change (x) to point to (sx); Now (x) has one or no children and (p) is its parent Prof. Amr Goneid, AUC

  43. Algorithm to remove a Node Case (x) has one or no children: Let (s) point to the child of (x) or null if there are no children; If p = null then set root to null; else if (x) is a left child of (p), set pleft = s; else set pright = s; Now (x) is isolated and can be deleted delete (x); } Prof. Amr Goneid, AUC

  44. 40 20 10 30 60 50 70 Example: Delete Root p = null x Prof. Amr Goneid, AUC

  45. 40 20 10 30 60 50 70 Example: Delete Root x p sx Prof. Amr Goneid, AUC

  46. 50 20 10 30 60 50 70 Example: Delete Root p x S = null Prof. Amr Goneid, AUC

  47. 50 20 10 30 60 50 70 Example: Delete Root null x delete Prof. Amr Goneid, AUC

  48. 5. Binary Search Tree ADT • Elements: A BST consists of a collection of elements that are all of the same type. An element is composed of two parts: key of <keyType> and data of <dataType> • Structure: A node in a BST has at most two subtrees. The key value in a node is larger than all the keys in its left subtree and smaller than all keys in its right subtree. Duplicate keys are not allowed. Prof. Amr Goneid, AUC

  49. Binary Search Tree ADT • Data members • root pointer to the tree root • Basic Operations • binaryTree a constructor • insert inserts an item • empty checks if tree is empty • search locates a node given a key Prof. Amr Goneid, AUC

  50. Binary Search Tree ADT • Basic Operations (continued) • retrieve retrieves data given key • traverse traverses a tree (In-Order) • preorder pre-order traversal • levelorder Level-order traversal • remove Delete node given key • graph simple graphical output Prof. Amr Goneid, AUC

More Related