Presentation is loading. Please wait.

Presentation is loading. Please wait.

Binary Search Tree Smt Genap 2011-2012. Outline Concept of Binary Search Tree (BST) BST operations ◦ Find ◦ Insert ◦ Remove Running time analysis of BST.

Similar presentations


Presentation on theme: "Binary Search Tree Smt Genap 2011-2012. Outline Concept of Binary Search Tree (BST) BST operations ◦ Find ◦ Insert ◦ Remove Running time analysis of BST."— Presentation transcript:

1 Binary Search Tree Smt Genap 2011-2012

2 Outline Concept of Binary Search Tree (BST) BST operations ◦ Find ◦ Insert ◦ Remove Running time analysis of BST operations Smt Genap 2011-2012

3 Binary Search Tree: Properties Elements have keys (no duplicates allowed). For every node X in the tree, the values of all the keys in the left subtree are smaller than the key in X and the values of all the keys in the right subtree are larger than the key in X. The keys must be comparable. Smt Genap 2011-2012 X X

4 Binary Search Tree: Examples Smt Genap 2011-2012 7 2 3 9 15 6

5 Binary Search Tree: Examples Smt Genap 2011-2012 3 2 1 3 1 2 2 13 1 3 2 1 2 3

6 Basic Operations FindMin, FindMax, Find Insert Remove Smt Genap 2011-2012

7 FindMin Find node with the smallest value Algorithm: ◦ Keep going left until you reach a dead end! Code: BinaryNode findMin(BinaryNode t) { if (t != null) while (t.left != null) t = t.left; return t; } Smt Genap 2011-2012

8 FindMax Find node with the largest value Algorithm: ◦ Keep going right until you reach a dead end! Code: BinaryNode findMax(BinaryNode t) { if (t != null) while (t.right != null) t = t.right; return t; } Smt Genap 2011-2012

9 Find You are given an element to find in a BST. If it exists, return the node. If not, return null. Algorithm? Code? Smt Genap 2011-2012 7 2 3 9 15 6

10 Find: Implementation BinaryNode find(Type x, BinaryNode t) { while(t!=null) { if(x.compareTo(t.element)<0) t = t.left; else if(x.compareTo(t.element)>0) t = t.right; else return t; // Match } return null; // Not found } Smt Genap 2011-2012

11 Insertion: Principle When inserting a new element into a binary search tree, it will always become a leaf node. Smt Genap 2011-2012 10 2 3 15 15 6 12 14

12 Insertion: Algorithm To insert X into a binary search tree: ◦ Start from the root ◦ If the value of X < the value of the root: X should be inserted in the left sub-tree. ◦ If the value of X > the value of the root: X should be inserted in the right sub-tree. Remember that a sub-tree is also a tree. We can implement this recursively! Smt Genap 2011-2012

13 Insertion: Implementation BinaryNode insert(Type x, BinaryNode t) { if (t == null) t = new BinaryNode (x); else if(x.compareTo(t.element)<0) t.left = insert (x, t.left); else if(x.compareTo(t.element)>0) t.right = insert (x, t.right); else throw new DuplicateItemException(x); return t; } Smt Genap 2011-2012

14 Removing An Element Smt Genap 2011-2012 8 4 5 12 1 6 3 5 6 4

15 Removing An Element: Algorithm If the node is a leaf, simply delete it. If the node has one child, adjust parent’s child reference to bypass the node. If the node has two children: ◦ Replace the node’s element with the smallest element in the right subtree and then remove that node, or ◦ Replace the node’s element with the largest element in the left subtree and then remove that node Introduces new sub-problems: ◦ removeMin: ◦ Alternatively, removeMax Smt Genap 2011-2012

16 Removing Leaf Smt Genap 2011-2012 8 4 5 12 1 6 3

17 Removing Node With 1 Child Smt Genap 2011-2012 8 4 5 12 1 6 3

18 Removing Node With 1 Child Smt Genap 2011-2012 8 4 5 12 1 6 3

19 removeMin BinaryNode removeMin(BinaryNode t) { if (t == null) throw new ItemNotFoundException(); else if (t.left != null) { t.left = removeMin(t.left); return t; } else return t.right; } Smt Genap 2011-2012

20 Removing Node With 2 Children Smt Genap 2011-2012 7 2 3 9 15 4

21 Removing Node With 2 Children Smt Genap 2011-2012 7 3 3 9 15 4 2 3

22 Removing Node With 2 Children Smt Genap 2011-2012 7 2 3 9 15 4 2 3

23 Removing Root Smt Genap 2011-2012 7 2 3 12 15 4 1014 911 9

24 Remove BinaryNode remove(Type x, BinaryNode t) { if (t == null) throw new ItemNotFoundException(); if (x.compareTo(t.element)<0) t.left = remove(x, t.left); else if(x.compareTo(t.element)>0) t.right = remove(x, t.right); else if (t.left!=null && t.right != null) { t.element = findMin(t.right).element; t.right = removeMin(t.right); } else { if(t.left!=null) t=t.left; else t=t.right; } return t; } Smt Genap 2011-2012

25 Find k-th element Smt Genap 2011-2012 SLSL SRSR X k < S L + 1 SLSL SRSR X k == S L + 1 SLSL SRSR X k > S L + 1

26 Find k-th element BinaryNode findKth(int k, BinaryNode t) { if (t == null) throw exception; int leftSize = (t.left != null) ? t.left.size : 0; if (k <= leftSize ) return findKth (k, t.left); else if (k == leftSize + 1) return t; else return findKth ( k - leftSize - 1, t.right); } Smt Genap 2011-2012

27 Analysis Running time for: ◦ Insert? ◦ Find min? ◦ Remove? ◦ Find? Average case: O(log n) Worst case: O(n) Smt Genap 2011-2012

28 Summary Binary Search Tree maintains the order of the tree. Each node should be comparable All operations take O(log n) - average case, when the tree is equally balanced. All operations will take O(n) - worst case, when the height of the tree equals the number of nodes. Smt Genap 2011-2012


Download ppt "Binary Search Tree Smt Genap 2011-2012. Outline Concept of Binary Search Tree (BST) BST operations ◦ Find ◦ Insert ◦ Remove Running time analysis of BST."

Similar presentations


Ads by Google