![Page 1: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/1.jpg)
CSE373: Data Structures & Algorithms 1
CSE373: Data Structures & Algorithms
Lecture 6: Binary Search Trees
Nicki DellSpring 2014
Spring 2014
![Page 2: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/2.jpg)
CSE373: Data Structures & Algorithms 2
Announcements
• HW2 due start of class Wednesday 16th April• TA sessions next week
– Tuesday: More help with homework 2– Thursday: Binary Search Trees and AVL Trees
Spring 2014
![Page 3: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/3.jpg)
CSE373: Data Structures & Algorithms 3
Previously on CSE 373
– Dictionary ADT• stores (key, value) pairs• find, insert, delete
– Trees• Terminology• Binary Trees
Spring 2014
![Page 4: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/4.jpg)
CSE373: Data Structures & Algorithms 4
Reminder: Tree terminology
Spring 2014
A
E
B
D F
C
G
IH
LJ MK N
Node / Vertex
Edges
Root
Leaves
Left subtreeRight subtree
![Page 5: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/5.jpg)
CSE373: Data Structures & Algorithms 5
Example Tree Calculations
Spring 2014
A
E
B
D F
C
G
IH
LJ MK N
A
Recall: Height of a tree is the maximum number of edges from the root to a leaf.
Height = 0
A
B Height = 1
What is the height of this tree?
What is the depth of node G?
What is the depth of node L?
Depth = 2
Depth = 4
Height = 4
![Page 6: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/6.jpg)
CSE373: Data Structures & Algorithms 6
Binary Trees
Spring 2014
• Binary tree: Each node has at most 2 children (branching factor 2)
• Binary tree is• A root (with data)• A left subtree (may be empty) • A right subtree (may be empty)
• Special Cases
![Page 7: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/7.jpg)
CSE373: Data Structures & Algorithms 7
Tree TraversalsA traversal is an order for visiting all the nodes of a tree
• Pre-order: root, left subtree, right subtree
• In-order: left subtree, root, right subtree
• Post-order: left subtree, right subtree, root
+
*
2 4
5
(an expression tree)
Spring 2014
+ * 2 4 5
2 * 4 + 5
2 4 * 5 +
![Page 8: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/8.jpg)
CSE373: Data Structures & Algorithms 8
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
![Page 9: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/9.jpg)
CSE373: Data Structures & Algorithms 9
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
![Page 10: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/10.jpg)
CSE373: Data Structures & Algorithms 10
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
![Page 11: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/11.jpg)
CSE373: Data Structures & Algorithms 11
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
✓
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
D
![Page 12: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/12.jpg)
CSE373: Data Structures & Algorithms 12
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
✓
✓
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
D B
![Page 13: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/13.jpg)
CSE373: Data Structures & Algorithms 13
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
✓
✓ ✓
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
D B E
![Page 14: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/14.jpg)
CSE373: Data Structures & Algorithms 14
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
✓
✓ ✓
✓
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
D B E A
![Page 15: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/15.jpg)
CSE373: Data Structures & Algorithms 15
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
✓
✓ ✓
✓
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
D B E A
![Page 16: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/16.jpg)
CSE373: Data Structures & Algorithms 16
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
✓
✓ ✓
✓
✓
✓
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
D B E A F C
![Page 17: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/17.jpg)
CSE373: Data Structures & Algorithms 17
More on traversalsvoid inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
A
B
D E
C
F G
Spring 2014
✓
✓ ✓
✓
✓
✓ ✓
= current node = processing (on the call stack) = completed node = element has been processed
A A
A ✓
D B E A F C G
![Page 18: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/18.jpg)
More on traversals
void inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); }}
Sometimes order doesn’t matter• Example: sum all elements
Sometimes order matters• Example: evaluate an expression tree
A
B
D E
C
F G
Spring 2014 18CSE373: Data Structures & Algorithms
A
B
D E
C
F G
✓
✓ ✓
✓
✓
✓ ✓
![Page 19: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/19.jpg)
Binary Search Tree (BST) Data Structure
4
121062
115
8
14
13
7 9
• Structure property (binary tree)– Each node has 2 children– Result: keeps operations simple
• Order property– All keys in left subtree smaller
than node’s key– All keys in right subtree larger
than node’s key– Result: easy to find any given key
Spring 2014 19CSE373: Data Structures & Algorithms
A binary search tree is a type of binary tree (but not all binary trees are binary search trees!)
![Page 20: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/20.jpg)
Are these BSTs?
3
1171
84
5
4
181062
115
8
20
21
7
15
Spring 2014 20CSE373: Data Structures & Algorithms
Activity!
![Page 21: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/21.jpg)
Find in BST, Recursive
2092
155
12
307 1710
Data find(Key key, Node root){ if(root == null) return null; if(key < root.key) return find(key,root.left); if(key > root.key) return find(key,root.right); return root.data;}
Spring 2014 21CSE373: Data Structures & Algorithms
Worst case running time is O(n).- Happens if the tree is very lopsided (e.g. list)
321 4
What is the running time?
![Page 22: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/22.jpg)
Find in BST, Iterative
2092
155
12
307 1710
Data find(Key key, Node root){ while(root != null && root.key != key) { if(key < root.key) root = root.left; else(key > root.key) root = root.right; } if(root == null) return null; return root.data;}
Spring 2014 22CSE373: Data Structures & Algorithms
Worst case running time is O(n).- Happens if the tree is very lopsided (e.g. list)
![Page 23: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/23.jpg)
Bonus: Other BST “Finding” Operations
• FindMin: Find minimum node– Left-most node
• FindMax: Find maximum node– Right-most node 2092
155
12
307 1710
Spring 2014 23CSE373: Data Structures & Algorithms
![Page 24: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/24.jpg)
Insert in BST
2092
155
12
307 17
insert(13)insert(8)insert(31)
(New) insertions happen only at leaves – easy!10
8 31
13
Spring 2014 24CSE373: Data Structures & Algorithms
Again… worst case running time is O(n), which may happen if the tree is not balanced.
![Page 25: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/25.jpg)
Deletion in BST
2092
155
12
307 17
Why might deletion be harder than insertion?
10
Spring 2014 25CSE373: Data Structures & Algorithms
Removing an item may disrupt the tree structure!
![Page 26: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/26.jpg)
Deletion in BST• Basic idea: find the node to be removed, then
“fix” the tree so that it is still a binary search tree
• Three potential cases to fix:– Node has no children (leaf)– Node has one child– Node has two children
Spring 2014 26CSE373: Data Structures & Algorithms
![Page 27: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/27.jpg)
Deletion – The Leaf Case
2092
155
12
307 17
delete(17)
10
Spring 2014 27CSE373: Data Structures & Algorithms
![Page 28: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/28.jpg)
Deletion – The One Child Case
2092
155
12
307 10
Spring 2014 28CSE373: Data Structures & Algorithms
delete(15)
![Page 29: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/29.jpg)
Deletion – The One Child Case
2092
5
12
307 10
Spring 2014 29CSE373: Data Structures & Algorithms
delete(15)
![Page 30: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/30.jpg)
Deletion – The Two Child Case
3092
205
12
7
What can we replace 5 with?
10
Spring 2014 30CSE373: Data Structures & Algorithms
delete(5)
4
![Page 31: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/31.jpg)
Deletion – The Two Child Case
Idea: Replace the deleted node with a value guaranteed to be between the two child subtrees
Options:• successor minimum node from right subtree
findMin(node.right)
• predecessor maximum node from left subtree findMax(node.left)
Now delete the original node containing successor or predecessor
Spring 2014 31CSE373: Data Structures & Algorithms
![Page 32: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/32.jpg)
Deletion: The Two Child Case (example)
Spring 2014 32CSE373: Data Structures & Algorithms
3092
235
12
7 10
18
1915 3225
delete(23)
![Page 33: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/33.jpg)
Deletion: The Two Child Case (example)
Spring 2014 33CSE373: Data Structures & Algorithms
3092
235
12
7 10
18
1915 3225
delete(23)
![Page 34: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/34.jpg)
Deletion: The Two Child Case (example)
Spring 2014 34CSE373: Data Structures & Algorithms
3092
195
12
7 10
18
1915 3225
delete(23)
![Page 35: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/35.jpg)
Deletion: The Two Child Case (example)
Spring 2014 35CSE373: Data Structures & Algorithms
3092
195
12
7 10
18
15 3225
Success!
delete(23)
![Page 36: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/36.jpg)
Lazy Deletion
• Lazy deletion can work well for a BST– Simpler– Can do “real deletions” later as a batch– Some inserts can just “undelete” a tree node
• But– Can waste space and slow down find operations– Make some operations more complicated:
• e.g., findMin and findMax?
Spring 2014 36CSE373: Data Structures & Algorithms
![Page 37: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/37.jpg)
BuildTree for BST• Let’s consider buildTree
– Insert all, starting from an empty tree
• Insert keys 1, 2, 3, 4, 5, 6, 7, 8, 9 into an empty BST
– If inserted in given order, what is the tree?
– What big-O runtime for this kind of sorted input?
– Is inserting in the reverse order any better?
1
2
3O(n2)
Not a happy place
Spring 2014 37CSE373: Data Structures & Algorithms
![Page 38: CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees](https://reader035.vdocuments.net/reader035/viewer/2022070421/5681603d550346895dcf5f34/html5/thumbnails/38.jpg)
BuildTree for BST• Insert keys 1, 2, 3, 4, 5, 6, 7, 8, 9 into an empty BST
• What we if could somehow re-arrange them– median first, then left median, right median, etc.– 5, 3, 7, 2, 1, 4, 8, 6, 9
– What tree does that give us?
– What big-O runtime?
842
73
5
9
6
1
O(n log n), definitely better
Spring 2014 38CSE373: Data Structures & Algorithms