Binary search trees (chapters )

Similar documents
Binary search trees (chapters )

Algorithms. AVL Tree

TREES. Trees - Introduction

Data structures. Priority queues, binary heaps. Dr. Alex Gerdes DIT961 - VT 2018

DATA STRUCTURES AND ALGORITHMS. Hierarchical data structures: AVL tree, Bayer tree, Heap

Red-black trees (19.5), B-trees (19.8), trees

Trees. (Trees) Data Structures and Programming Spring / 28

Binary Trees, Binary Search Trees

AVL trees and rotations

AVL Trees / Slide 2. AVL Trees / Slide 4. Let N h be the minimum number of nodes in an AVL tree of height h. AVL Trees / Slide 6

Self-Balancing Search Trees. Chapter 11

CS Transform-and-Conquer

CS350: Data Structures AVL Trees

Data Structures Lesson 7

Binary heaps (chapters ) Leftist heaps

CS350: Data Structures Red-Black Trees

COMP171. AVL-Trees (Part 1)

AVL Trees Goodrich, Tamassia, Goldwasser AVL Trees 1

Programming II (CS300)

Binary Search Trees. Analysis of Algorithms

Trees. A tree is a directed graph with the property

AVL Tree Definition. An example of an AVL tree where the heights are shown next to the nodes. Adelson-Velsky and Landis

CSE 373 OCTOBER 11 TH TRAVERSALS AND AVL

9/29/2016. Chapter 4 Trees. Introduction. Terminology. Terminology. Terminology. Terminology

CSCI2100B Data Structures Trees

Unit III - Tree TREES

CISC 235: Topic 4. Balanced Binary Search Trees

CS 206 Introduction to Computer Science II

Advanced Tree Data Structures

Balanced Search Trees. CS 3110 Fall 2010

Data Structures and Algorithms

Analysis of Algorithms

Balanced Binary Search Trees

AVL Trees (10.2) AVL Trees

Module 4: Index Structures Lecture 13: Index structure. The Lecture Contains: Index structure. Binary search tree (BST) B-tree. B+-tree.

BINARY SEARCH TREES cs2420 Introduction to Algorithms and Data Structures Spring 2015

Some Search Structures. Balanced Search Trees. Binary Search Trees. A Binary Search Tree. Review Binary Search Trees

Algorithms. Deleting from Red-Black Trees B-Trees

AVL trees and rotations

Define the red- black tree properties Describe and implement rotations Implement red- black tree insertion

Computational Optimization ISE 407. Lecture 16. Dr. Ted Ralphs

Introduction. for large input, even access time may be prohibitive we need data structures that exhibit times closer to O(log N) binary search tree

ECE250: Algorithms and Data Structures AVL Trees (Part A)

Friday Four Square! 4:15PM, Outside Gates

Trees. Eric McCreath

12 July, Red-Black Trees. Red-Black Trees

Data Structures in Java

Algorithms in Systems Engineering ISE 172. Lecture 16. Dr. Ted Ralphs

Trees. Reading: Weiss, Chapter 4. Cpt S 223, Fall 2007 Copyright: Washington State University

Week 2. TA Lab Consulting - See schedule (cs400 home pages) Peer Mentoring available - Friday 8am-12pm, 12:15-1:30pm in 1289CS

10/23/2013. AVL Trees. Height of an AVL Tree. Height of an AVL Tree. AVL Trees

CS 171: Introduction to Computer Science II. Binary Search Trees

Data Structures and Algorithms for Engineers

If you took your exam home last time, I will still regrade it if you want.

Binary Trees

CSE 373 APRIL 17 TH TREE BALANCE AND AVL

Lec 17 April 8. Topics: binary Trees expression trees. (Chapter 5 of text)

Computer Science 210 Data Structures Siena College Fall Topic Notes: Binary Search Trees

Trees. A tree is a data structure consisting of data nodes connected to each other with pointers: Leaf. Vocabulary

Note that this is a rep invariant! The type system doesn t enforce this but you need it to be true. Should use repok to check in debug version.

CS102 Binary Search Trees

CSCI Trees. Mark Redekopp David Kempe

CIS265/ Trees Red-Black Trees. Some of the following material is from:

Red-Black Trees. Based on materials by Dennis Frey, Yun Peng, Jian Chen, and Daniel Hood

AVL Trees. (AVL Trees) Data Structures and Programming Spring / 17

CS60020: Foundations of Algorithm Design and Machine Learning. Sourangshu Bhattacharya

CSCI 136 Data Structures & Advanced Programming. Lecture 25 Fall 2018 Instructor: B 2

Search Structures. Kyungran Kang

CSCI-401 Examlet #5. Name: Class: Date: True/False Indicate whether the sentence or statement is true or false.

COSC160: Data Structures Balanced Trees. Jeremy Bolton, PhD Assistant Teaching Professor

CS60020: Foundations of Algorithm Design and Machine Learning. Sourangshu Bhattacharya

COMP : Trees. COMP20012 Trees 219

Lecture 13: AVL Trees and Binary Heaps

Copyright 1998 by Addison-Wesley Publishing Company 147. Chapter 15. Stacks and Queues

Computer Science 210 Data Structures Siena College Fall Topic Notes: Binary Search Trees

Part 2: Balanced Trees

Announcements. Midterm exam 2, Thursday, May 18. Today s topic: Binary trees (Ch. 8) Next topic: Priority queues and heaps. Break around 11:45am

Chapter 12 Advanced Data Structures

CSI33 Data Structures

Cpt S 122 Data Structures. Data Structures Trees

Trees 2: Linked Representation, Tree Traversal, and Binary Search Trees

Transform & Conquer. Presorting

Hierarchical data structures. Announcements. Motivation for trees. Tree overview

Section 4 SOLUTION: AVL Trees & B-Trees

Search Trees - 1 Venkatanatha Sarma Y

Solutions. Suppose we insert all elements of U into the table, and let n(b) be the number of elements of U that hash to bucket b. Then.

BRONX COMMUNITY COLLEGE of the City University of New York DEPARTMENT OF MATHEMATICS AND COMPUTER SCIENCE

CS 331 DATA STRUCTURES & ALGORITHMS BINARY TREES, THE SEARCH TREE ADT BINARY SEARCH TREES, RED BLACK TREES, THE TREE TRAVERSALS, B TREES WEEK - 7

Trees. Introduction & Terminology. February 05, 2018 Cinda Heeren / Geoffrey Tien 1

ECE 242 Data Structures and Algorithms. Trees IV. Lecture 21. Prof.

CHAPTER 10 AVL TREES. 3 8 z 4

Tree Structures. A hierarchical data structure whose point of entry is the root node

Search Trees. Chapter 11

(2,4) Trees Goodrich, Tamassia (2,4) Trees 1

A set of nodes (or vertices) with a single starting point

Search Trees. Undirected graph Directed graph Tree Binary search tree

Extra: B+ Trees. Motivations. Differences between BST and B+ 10/27/2017. CS1: Java Programming Colorado State University

Uses for Trees About Trees Binary Trees. Trees. Seth Long. January 31, 2010

Ch04 Balanced Search Trees

Dynamic Access Binary Search Trees

Transcription:

Binary search trees (chapters 18.1 18.3)

Binary search trees In a binary search tree (BST), every node is greater than all its left descendants, and less than all its right descendants (recall that this is an invariant) owl hamster penguin gorilla lemur wolf ape horse

Searching in a BST Finding an element in a BST is easy, because by looking at the root you can tell which subtree the element is in lemur must be in left subtree of owl hamster owl penguin lemur must be in right subtree of hamster gorilla lemur wolf ape horse

Searching in a binary search tree To search for target in a BST: If the target matches the root node's data, we've found it If the target is less than the root node's data, recursively search the left subtree If the target is greater than the root node's data, recursively search the right subtree If the tree is empty, fail A BST can be used to implement a set, or a map from keys to values

Inserting into a BST To insert a value into a BST: Start by searching for the value But when you get to null (the empty tree), make a node for the value and place it there owl hamster penguin gorilla lemur wolf ape horse monkey

Deleting from a BST To delete a value into a BST: Find the node containing the value If the node is a leaf, just remove it hamster owl penguin To delete wolf, just remove this node from the tree gorilla lemur wolf ape horse

Deleting from a BST, continued If the node has one child, replace the node with its child owl To delete penguin, replace it in the tree with wolf hamster penguin gorilla lemur wolf ape horse

Deleting from a BST To delete a value from a BST: Find the node If it has no children, just remove it from the tree If it has one child, replace the node with its child If it has two children...? Can't remove the node without removing its children too!

Deleting a node with two children Delete the biggest value from the node's left subtree and put this value [why this one?] in place of the node we want to delete Delete owl by replacing it with monkey owl hamster penguin gorilla lemur wolf ape horse monkey Delete monkey

Deleting a node with two children Delete the biggest value from the node's left subtree and put this value [why this one?] in place of the node we want to delete The root is now monkey monkey hamster penguin gorilla lemur wolf ape horse

Deleting a node with two children Here is the most complicated case: To delete monkey, replace it by lemur monkey hamster penguin gorilla lemur wolf ape horse But lemur has a child! Put horse where lemur was

Deleting a node with two children Here is the most complicated case: To delete monkey, replace it by lemur monkey hamster penguin gorilla lemur wolf ape horse But lemur has a child! Put horse where lemur was

Deleting a node with two children Here is the most complicated case: lemur hamster penguin gorilla horse wolf ape

A bigger example What happens if we delete farmer? is? cow? rat?

Deleting a node with two children Deleting rat, we replace it with priest; now we have to delete priest which has a child, morn

Deleting a node with two children Find and delete the biggest value in the left subtree and put that value in the deleted node Using the biggest value preserves the invariant (check you understand why) To find the biggest value: repeatedly descend into the right child until you find a node with no right child The biggest node can't have two children, so deleting it is easier

Complexity of BST operations All our operations are O(height of tree) This means O(log n) if the tree is balanced, but O(n) if it's unbalanced (like the tree on the right) how might we get this tree? Balanced BSTs add an extra invariant that makes sure the tree is balanced then all operations are O(log n)

Summary of BSTs Binary trees with BST invariant Can be used to implement sets and maps lookup: can easily find a value in the tree insert: perform a lookup, then put the new value at the place where the lookup would terminate delete: find the value, then remove its node from the tree several cases depending on how many children the node has Complexity: all operations O(height of tree) that is, O(log n) if tree is balanced, O(n) if unbalanced inserting random data tends to give balanced trees, sequential data gives unbalanced ones

Tree traversal Traversing a tree means visiting all its nodes in some order A traversal is a particular order that we visit the nodes in Three common traversals: preorder, inorder, postorder

Preorder traversal Visit root node, then left subtree, then right (root node first) 1 owl 2 hamster 6 penguin 3 gorilla 5 lemur 7 wolf 4 ape

Postorder traversal Visit left subtree, then right, then root node (root node last) 7 owl 4 hamster 6 penguin 2 gorilla 3 lemur 5 wolf 1 ape

Inorder traversal Visit left subtree, then root node, then right (root node in middle) 3 5 hamster owl 6 penguin Inorder traversal of a BST gives you the nodes in ascending order! 2 gorilla 4 lemur 7 wolf 1 ape

In-order traversal printing void inorder(node<e> node) { if (node == null) return; inorder(node.left); System.out.println(node.value); inorder(node.right); } But nicer to define an iterator! Iterator<Node<E>> inorder(node<e> node); See 17.4

AVL trees (chapter 18.4)

Balanced BSTs: the problem The BST operations take O(height of tree), so for unbalanced trees can take O(n) time

Balanced BSTs: the solution Take BSTs and add an extra invariant that makes sure that the tree is balanced Height of tree must be O(log n) Then all operations will take O(log n) time One possible idea for an invariant: Height of left child = height of right child (for all nodes in the tree) Tree would be sort of perfectly balanced What's wrong with this idea?

A too restrictive invariant Perfect balance is too restrictive! Number of nodes can only be 1, 3, 7, 15, 31,... owl hamster penguin gorilla lemur panda wolf

AVL trees a less restrictive invariant The AVL tree is the first balanced BST discovered (from 1962) it's named after Adelson-Velsky and Landis It's a BST with the following invariant: The difference in heights between the left and right children of any node is at most 1 This makes the tree's height O(log n), so it's balanced

Example of an AVL tree (from Wikipedia) Left child height 2 Right child height 2 Left child height 2 Right child height 1 50 17 72 12 23 54 76 9 14 19 67 Left child height 1 Right child height 0

Why are these not AVL trees?

Why are these not AVL trees? Left child height 0 Right child height 8

Why are these not AVL trees? Left child height 1 Right child height 3

Rotation Rotation rearranges a BST by moving a different node to the root, without changing the BST's contents (pic from Wikipedia)

Rotation We can strategically use rotations to rebalance an unbalanced tree. This is what most balanced BST variants do! Height of 3 Height of 4

AVL insertion Start by doing a BST insertion This might break the AVL (balance) invariant Then go upwards from the newly-inserted node, looking for nodes that break the invariant (unbalanced nodes) Whenever you find one, rotate it Then continue upwards in the tree There are several cases depending on how the node became unbalanced

Case 1: a left-left tree 50 25 a b The purple represents an insertion that has increased the height of tree a to k+1 c Each pink triangle represents an AVL tree with height k

Case 1: a left-left tree Height k+2 50 Height k 25 c a b Left height minus right height = 2: invariant broken!

Case 1: a left-left tree 25 50 This is called a left-left tree because both the root and the left child are deeper on the left c a b To fix it we do a right rotation

Balancing a left-left tree, afterwards Height k+1 25 Height k+1 a 50 Invariant restored! b c

Case 2: a right-right tree 25 50 Mirror image of left-left tree Can be fixed with left rotation a b c

Case 3: a left-right tree Height k+2 50 Height k 25 c a b Left height minus right height = 2: invariant broken!

Case 3: a left-right tree 50 25 c a b We can't fix this with one rotation Let's look at b's subtrees b L and b R

Case 3: a left-right tree 50 25 40 c a b L b R Rotate 25-subtree to the left Height k-1

Case 3: a left-right tree Height k+2 50 Height k Height k+1 40 25 b R c a b L We now have a left-left tree! So we can fix it by rotating the whole tree to the right

Case 3: a left-right tree 40 Balanced! Notice it works whichever of b L and b R has the extra height 25 50 b L b R a c

Case 4: a right-left tree 25 Mirror image of left-right tree 50 a b c

Four sorts of unbalanced trees Left-left (height of left-left grandchild = k+1, height of left child = k+2, height of right child = k) Rotate the whole tree to the right Left-right (height of left-right grandchild = k+1, height of left child = k+2, height of right child = k) First rotate the left child to the left Then rotate the whole tree to the right Right-left and right-right: symmetric

The four cases Left Right Case 2 5-1 D 3 Right Left Case -2 3 A 1 5 (picture from Wikipedia) The numbers in the diagram show the balance of the tree: left height minus right height To implement this efficiently, record the balance in the nodes and look at it to work out which case you're in A A D 4 4 B C B C Left Left Case Right Right Case 2-2 5 3 1/0 D A -1/0 4 4 C B 3 5 B C D Balanced Balanced 4-1/0 4 1/0 3 5 3 5 A B C D A B C D

A bigger example (slides from Peter Ljunglöf) Let's build an AVL tree for the words in a quick brown fox jumps over the lazy dog Try this example on https://www.cs.usfca.edu/~galles/visuali zation/avltree.html 49

a quick brown a +2 quick -1 brown 0 The overall tree is rightheavy (Right-Left) parent balance = +2 right child balance = -1 50

a quick brown a +2 quick -1 brown 0 1. Rotate right around the child 51

a quick brown a +2 brown +1 quick 0 1. Rotate right around the child 52

a quick brown a +2 brown +1 quick 0 1. Rotate right around the child 2. Rotate left around the parent 53

a quick brown brown 0 a 0 quick 0 1. Rotate right around the child 2. Rotate left around the parent 54

a quick brown fox a 0 brown 0 quick 0 Insert fox 55

a quick brown fox a 0 brown +1 quick -1 Insert fox fox 0 56

a quick brown fox jumps a 0 brown +1 quick -1 Insert jumps fox 0 57

a quick brown fox jumps a 0 brown +2 quick -2 Insert jumps fox +1 jumps 0 58

a quick brown fox jumps brown +2 a 0 quick -2 fox +1 jumps 0 The tree is now leftheavy about quick (Left- Right case) 59

a quick brown fox jumps brown +2 a 0 quick -2 fox +1 jumps 0 1. Rotate left around the child 60

a quick brown fox jumps brown +2 a 0 quick -2 jumps -1 fox 0 1. Rotate left around the child 61

a quick brown fox jumps brown +2 a 0 quick -2 jumps -1 fox 0 1. Rotate left around the child 2. Rotate right around the parent 62

a quick brown fox jumps brown +1 a 0 jumps 0 fox 0 quick 0 1. Rotate left around the child 2. Rotate right around the parent 63

a quick brown fox jumps over a 0 brown +1 jumps 0 Insert over fox 0 quick 0 64

a quick brown fox jumps over a 0 brown +2 jumps +1 Insert over fox 0 quick -1 over 0 65

a quick brown fox jumps over brown +2 a 0 jumps +1 fox 0 quick -1 over 0 We now have a Right- Right imbalance 66

a quick brown fox jumps over brown +2 a 0 jumps +1 fox 0 quick -1 over 0 1. Rotate left around the parent 67

a quick brown fox jumps over jumps 0 brown 0 quick -1 a 0 fox 0 over 0 1. Rotate left around the parent 68

a quick brown fox jumps over the brown 0 jumps 0 quick -1 Insert the a 0 fox 0 over 0 69

a quick brown fox jumps over the brown 0 jumps 0 quick 0 Insert the a 0 fox 0 over 0 the 0 70

a quick brown fox jumps over the lazy brown 0 jumps 0 quick 0 Insert lazy a 0 fox 0 over 0 the 0 71

a quick brown fox jumps over the lazy brown 0 jumps +1 quick -1 Insert lazy a 0 fox 0 over -1 the 0 lazy 0 72

a quick brown fox jumps over the lazy dog brown 0 jumps +1 quick -1 Insert dog a 0 fox 0 over -1 the 0 lazy 0 73

a quick brown fox jumps over the lazy dog! brown +1 jumps 0 quick -1 Insert dog a 0 fox -1 over -1 the 0 dog 0 lazy 0 74

AVL trees A balanced BST that maintains balance by rotating the tree Insertion: insert as in a BST and move upwards from the inserted node, rotating unbalanced nodes Deletion (in book if you're interested): delete as in a BST and move upwards from the node that disappeared, rotating unbalanced nodes Worst-case (it turns out) 1.44log n, typical log n comparisons for any operation very balanced. This means lookups are quick. Insertion and deletion can be slower than in a naïve BST, because you have to do a bit of work to repair the invariant Look in Haskell compendium (course website) for implementation Visualisation: https://www.cs.usfca.edu/~galles/visualization/avltree.ht ml