lecture 7 - stanford...
TRANSCRIPT
![Page 1: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/1.jpg)
Lecture 7
Binary Search Trees and Red-Black Trees
![Page 2: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/2.jpg)
Announcements
• HW4 is out today
• This is a full-length one!
![Page 3: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/3.jpg)
Roadmap
Sorting
Graphs!Longest, Shortest, Max and Min…
Data
structures
Asymptotic
Analysis
Recurrences
Randomized
Algs
Dynamic
ProgrammingGreedy Algs
5 lectu
res 2
lectu
res
10 lectures
1 stclass
Divide and
conquerMIDTERM
1 le
ctu
re
The
Future!
More detailed schedule on the website!
We are here
![Page 4: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/4.jpg)
But first!
• A brief wrap-up of divide and conquer.
Big problem
Smaller
problem
Smaller
problem
Yet smaller
problem
Yet smaller
problem
Yet smaller
problem
Yet smaller
problem
Recurse!
Divide and
Conquer:
Recurse!
![Page 5: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/5.jpg)
How do we design divide-and-conquer algorithms?
• So far we’ve seen lots of examples.
• Karatsuba (and Alien Multiplication)
• MergeSort
• Select
• QuickSort
• Skyline Problem (HW1)
• Majority Aliens (HW2)
• Dancing Ducks (HW2)
• Let’s take a minute to zoom out and look at some general strategies.
![Page 6: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/6.jpg)
One Strategy
1. Identify natural sub-problems
• Arrays of half the size
• The left/right half of buildings in a skyline
• The lower/upper half of buildings in a skyline
• Things smaller/larger than a pivot
2. Imagine you had the magical ability to solve those natural sub-problems…what would you do?
• Just try it with all of the natural sub-problems you can come up with! Anything look helpful?
3. Work out the details
• Write down pseudocode, etc.
![Page 7: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/7.jpg)
Example: dancing ducks from HW2
Goal: implement PARTITION using FLIP
1 5 2 3 4 6
PIVOT
![Page 8: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/8.jpg)
Example: dancing ducks from HW2
1. Identify natural sub-problems.
• We already know there’s a pivot, so let’s say “left and
right of the pivot.”
2. What would happen if we could magically solve the subproblems?
3. Fill in the details.
13
PIVOT
<13 >13 <13 >13
How can
we use
the one
operation
we’re
allowed
to use?
13<13 >13<13 >13
FLIP!TADA!
Where do we put the pivot
for the recursive calls? How
do we do the indexing?
![Page 9: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/9.jpg)
One Strategy
1. Identify natural sub-problems
2. Imagine you had the magical ability to solve those natural sub-problems…what would you do?
3. Work out the details
Think about how you could
arrive at MergeSort or
QuickSort via this strategy!
![Page 10: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/10.jpg)
Other tips
• Small examples.• If you have an idea but are having trouble working out the
details, try it on a small example by hand.
• Gee, that looks familiar…• The more algorithms you see, the easier it will get to come up
with new algorithms!
• Bring in your analysis tools.• E.g., if I’m doing divide-and-conquer with 2 subproblems of
size n/2 and I want an O(n logn) time algorithm, I know that I can afford O(n) work combining my sub-problems.
• Iterate.• Darn, that approach didn’t work! But, if I tweaked this aspect
of it, maybe it works better?
• Everyone approaches problem-solving differently…find the way that works best for you.
![Page 11: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/11.jpg)
There is no one algorithm for designing algorithms.
• This can be frustrating on HW….
• What the heck do dancing ducks have to do with the
sorting algorithms we covered in lecture?!??!?!
• Practice helps!
• The examples we see in Lecture and in HW are meant to
help you practice this skill.
• There are even more algorithms in the book!
• Check out Algorithms Illuminated Chapter 3, or CLRS
Chapter 4, for even more examples of divide and conquer
algorithms.
![Page 12: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/12.jpg)
Roadmap
Sorting
Graphs!Longest, Shortest, Max and Min…
Data
structures
Asymptotic
Analysis
Recurrences
Randomized
Algs
Dynamic
ProgrammingGreedy Algs
5 lectu
res 2
lectu
res
10 lectures
1 stclass
Divide and
conquerMIDTERM
1 le
ctu
re
The
Future!
More detailed schedule on the website!
We are here
![Page 13: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/13.jpg)
Today
• Begin a brief foray into data structures!
• See CS 166 for more!
• Binary search trees
• You may remember these from CS 106B
• They are better when they’re balanced.
this will lead us to…
• Self-Balancing Binary Search Trees
• Red-Black trees.
![Page 14: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/14.jpg)
Some data structures
for storing objects like (aka, nodes with keys)
• (Sorted) arrays:
• Linked lists:
• Some basic operations:
• INSERT, DELETE, SEARCH
82 473 1 5HEAD
42 871 3 5
5
![Page 15: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/15.jpg)
Sorted Arrays
• O(n) INSERT/DELETE:
• First, find the relevant element (we’ll see how below), and then move a bunch elements in the array:
• O(log(n)) SEARCH:
42 871 3 5
421 3
42 871 3 5
eg, Binary search to see if 3 is in A.
8754.5
eg, insert 4.5
![Page 16: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/16.jpg)
(Not necessarily sorted)
Linked lists
• O(1) INSERT:
• O(n) SEARCH/DELETE:
45 827 3 1
45 827 3 1HEAD
6
45 827 3 1HEAD
eg, insert 6
eg, search for 1 (and then you could delete it by manipulating pointers).
![Page 17: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/17.jpg)
Motivation for Binary Search Trees
Sorted Arrays Linked ListsBinary Search
Trees
Search O(log(n)) O(n) O(log(n))
Delete O(n) O(n) O(log(n))
Insert O(n) O(1) O(log(n))
TODAY!
(Balanced)
![Page 18: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/18.jpg)
Binary tree terminology
42 8
7
1
3
5
This node is
the root
This is a node.
It has a key (7).
These nodes
are leaves.
The left child of is3 2
The right child of is3 4
Both children of are NIL.(I won’t usually draw them).
1
For today all keys are distinct.
Each node has two children.
NILNIL
Each node has a pointer to its
left child, right child, and parent.
The parent of is3 5
is a descendant of 2 5
The height of this tree is 3. (Max number of edges from the
root to a leaf).
![Page 19: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/19.jpg)
Binary Search Trees
4
2
8 7
1
35
• A BST is a binary tree so that:• Every LEFT descendant of a node has key less than that node.
• Every RIGHT descendant of a node has key larger than that node.
• Example of building a binary search tree:
From your pre-lecture exercise…
![Page 20: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/20.jpg)
Binary Search Trees
4
2
8 7
1
35
• A BST is a binary tree so that:• Every LEFT descendant of a node has key less than that node.
• Every RIGHT descendant of a node has key larger than that node.
• Example of building a binary search tree:
From your pre-lecture exercise…
![Page 21: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/21.jpg)
Binary Search Trees
42
8
7
1
35
• A BST is a binary tree so that:• Every LEFT descendant of a node has key less than that node.
• Every RIGHT descendant of a node has key larger than that node.
• Example of building a binary search tree:
From your pre-lecture exercise…
![Page 22: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/22.jpg)
Binary Search Trees
42
8
7
1
3
5
• A BST is a binary tree so that:• Every LEFT descendant of a node has key less than that node.
• Every RIGHT descendant of a node has key larger than that node.
• Example of building a binary search tree:
From your pre-lecture exercise…
![Page 23: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/23.jpg)
Binary Search Trees
42 8
7
1
3
5
• A BST is a binary tree so that:• Every LEFT descendant of a node has key less than that node.
• Every RIGHT descendant of a node has key larger than that node.
• Example of building a binary search tree:
Q: Is this the only
binary search tree I
could possibly build
with these values?
A: No. I made
choices about
which nodes to
choose when. Any
choices would
have been fine.
From your pre-lecture exercise…
![Page 24: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/24.jpg)
Aside: this should look familiar
4
2
8 7
1
35
kinda like QuickSort
![Page 25: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/25.jpg)
Binary Search Trees
42 8
7
1
3
5
• A BST is a binary tree so that:• Every LEFT descendant of a node has key less than that node.
• Every RIGHT descendant of a node has key larger than that node.
42 8
7
1
3
5
Binary Search TreeNOT a Binary
Search Tree
Which of these is a BST?
1 minute Think-Pair-Share
![Page 26: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/26.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
![Page 27: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/27.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
![Page 28: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/28.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
NIL NIL
![Page 29: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/29.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
NIL NIL
![Page 30: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/30.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2
NIL NIL
![Page 31: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/31.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2
NIL NIL
![Page 32: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/32.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2
NIL NIL
![Page 33: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/33.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2 3
![Page 34: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/34.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2 3 4
![Page 35: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/35.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2 3 4
![Page 36: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/36.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2 3 4 5
![Page 37: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/37.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2 3 4 5 7
![Page 38: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/38.jpg)
Aside: In-Order Traversal of BSTs
• Output all the elements in sorted order!
• inOrderTraversal(x):
• if x!= NIL:
• inOrderTraversal( x.left )
• print( x.key )
• inOrderTraversal( x.right )
42
73
5
2 3 4 5 7 Sorted!• Runs in time O(n).
![Page 39: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/39.jpg)
Back to the goal
Fast SEARCH/INSERT/DELETE
Can we do these?
![Page 40: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/40.jpg)
SEARCH in a Binary Search Treedefinition by example
42 8
7
1
3
5EXAMPLE: Search for 4.
EXAMPLE: Search for 4.5• It turns out it will be convenient
to return 4 in this case
• (that is, return the last node
before we went off the tree)!!!!
Ollie the over-achieving ostrich
Write pseudocode
(or actual code) to
implement this!How long does this take?
O(length of longest path) = O(height)
![Page 41: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/41.jpg)
INSERT in a Binary Search Tree
42 8
7
1
3
5
EXAMPLE: Insert 4.5
4.5
• INSERT(key):
• x = SEARCH(key)
• Insert a new node with
desired key at x…!!!!
x = 4
You thought about this on
your pre-lecture exercise!
(See skipped slide for
pseudocode.)
![Page 42: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/42.jpg)
INSERT in a Binary Search Tree
42 8
7
1
3
5
EXAMPLE: Insert 4.5
4.5
• INSERT(key):
• x = SEARCH(key)
• if key > x.key:
• Make a new node with the
correct key, and put it as the
right child of x.
• if key < x.key:
• Make a new node with the
correct key, and put it as the
left child of x.
• if x.key == key:
• return
!!!!
x = 4
This slide
skipped in
class – here
for reference
![Page 43: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/43.jpg)
DELETE in a Binary Search Tree
42 8
7
1
3
5
EXAMPLE: Delete 2
• DELETE(key):• x = SEARCH(key)
• if x.key == key:
• ….delete x….
You thought about this in your pre-
lecture exercise too!
This is a bit more complicated…see
the skipped slides for some pictures
of the different cases.
x = 2
![Page 44: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/44.jpg)
DELETE in a Binary Search Treeseveral cases (by example)
say we want to delete 3
This triangle
is a cartoon
for a subtree
3
Case 1: if 3 is a leaf,
just delete it.2
3
Case 2: if 3 has just one child,
move that up.
5 5
2
55
Siggi the Studious Stork
Write pseudocode for all of these!
This slide skipped
in class – here for
reference!
![Page 45: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/45.jpg)
DELETE in a Binary Search Tree ctd.
42
3
5
3.1
2
5
Case 3: if 3 has two children,
replace 3 with it’s immediate successor.(aka, next biggest thing after 3)
• Does this maintain the BST
property?• Yes.
• How do we find the
immediate successor?• SEARCH for 3 in the subtree
under 3.right
• How do we remove it when
we find it?
• If [3.1] has 0 or 1 children,
do one of the previous cases.
• What if [3.1] has two
children?• It doesn’t.
4
3.1
This slide skipped
in class – here for
reference!
![Page 46: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/46.jpg)
How long do these operations take?
• SEARCH is the big one.
• Everything else just calls SEARCH and then does some small O(1)-time operation.
42 8
73
5
6
Time = O(height of tree)
Trees have depth
O(log(n)). Done!
Lucky the
lackadaisical lemur.
How long does search take?1 minute think; 1 minute pair+share
Wait a
second…
Plucky the
Pedantic Penguin
![Page 47: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/47.jpg)
Search might take time O(n).
4
2
8
7
3
5
6
• This is a valid binary search tree.
• The version with n nodes has
depth n, not O(log(n)).
![Page 48: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/48.jpg)
What to do?
• Goal: Fast SEARCH/INSERT/DELETE
• All these things take time O(height)
• And the height might be big!!! L
• Idea 0:
• Keep track of how deep the tree is getting.
• If it gets too tall, re-do everything from scratch.
• At least Ω(n) every so often….
• Turns out that’s not a great idea. Instead we turn to…
Ollie the over-achieving ostrich
How often is “every so
often” in the worst case?
It’s actually pretty often!
![Page 49: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/49.jpg)
Self-Balancing
Binary Search Trees
![Page 50: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/50.jpg)
Idea 1: Rotations
• Maintain Binary Search Tree (BST) property, while moving stuff around.
BA
CY
XYOINK!
That’s not binary!! CLAIM:
this still has BST property.
No matter what lives underneath A,B,C,
this takes time O(1). (Why?)
BA
C
Y
X
B
A
C
Y
X
B fell
down.
Note: A, B, C, X, Y are
variable names, not the
contents of the nodes.
![Page 51: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/51.jpg)
This seems helpful
4
2
8
7
3
6
5
YOINK!
42 8
73
6
5
![Page 52: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/52.jpg)
Strategy?
• Whenever something seems unbalanced, do rotations until it’s okay again.
Lucky the Lackadaisical Lemur
Even for Lucky this is pretty vague.
What do we mean by “seems
unbalanced”? What’s “okay”?
![Page 53: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/53.jpg)
Idea 2: have some proxy for balance
• Maintaining perfect balance is too hard.
• Instead, come up with some proxy for balance:
• If the tree satisfies [SOME PROPERTY], then it’s pretty
balanced.
• We can maintain [SOME PROPERTY] using rotations.
There are actually several
ways to do this, but today
we’ll see…
![Page 54: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/54.jpg)
• A Binary Search Tree that balances itself!
• No more time-consuming by-hand balancing!
• Be the envy of your friends and neighbors with the time-saving…
Red-Black tree!
42 8
73
5
6
Maintain balance by stipulating that black nodes are balanced, and that
there aren’t too many red nodes.
It’s just good sense!
Red-Black Trees
![Page 55: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/55.jpg)
Red-Black Trees obey the following rules (which are a proxy for balance)
• Every node is colored red or black.
• The root node is a black node.
• NIL children count as black nodes.
• Children of a red node are black nodes.
• For all nodes x:
• all paths from x to NIL’s have the same
number of black nodes on them.
42 8
73
5
6
NIL NIL NIL NIL NIL NIL NIL NIL
I’m not going to draw the NIL
children in the future, but they
are treated as black nodes.
![Page 56: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/56.jpg)
Examples(?)• Every node is colored red or black.
• The root node is a black node.
• NIL children count as black nodes.
• Children of a red node are black nodes.
• For all nodes x:
• all paths from x to NIL’s have the same number of black nodes on them.
Yes!
No! No! No!
Which of these
are red-black trees?
(NIL nodes not drawn)
1 minute think
1 minute pair+share
![Page 57: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/57.jpg)
Why these rules???????
• This is pretty balanced.
• The black nodes are balanced
• The red nodes are “spread out”
so they don’t mess things up
too much.
• We can maintain this property as we insert/delete nodes, by using rotations.
42 8
73
5
6
9
This is the really clever idea!
This Red-Black structure is a proxy for balance. It’s just a smidge weaker than perfect balance, but we can actually maintain it!
![Page 58: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/58.jpg)
This is “pretty balanced”
• To see why, intuitively, let’s try to build a Red-Black Tree that’s unbalanced.
Lucky the
lackadaisical
lemur
Let’s build some intuition!
One path can be at most twice
as long another if we pad it
with red nodes.
Conjecture:
the height of a red-black tree
with n nodes is at most 2 log(n)
Other internal
nodes need to go
here!
Note, this is just a
conjecture to build
intuition! We’ll prove a
rigorous statement on
the next slide.
![Page 59: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/59.jpg)
The height of a RB-tree with n non-NIL nodes
is at most 2log(& + 1)
• Define b(x) to be the number of black
nodes in any path from x to NIL.
• (excluding x, including NIL).
• Claim:
• There are at least 2b(x) – 1 non-NIL nodes in the subtree underneath x.
(Including x).
• [Proof by induction – on board if time]
Then:
! ≥ 2! "##$ − 1
≥ 2 %&'()&*+ − 1
Rearranging:
! + 1 ≥ 2%,-./,$0 ⇒ ℎ)*+ℎ, ≤ 2log(! + 1)
x
y
using the Claim
b(root) >= height/2 because of RBTree rules.
z
NIL
Claim: at least 2b(x) – 1 nodes in this
WHOLE subtree (of any color).
![Page 60: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/60.jpg)
This is great!
• SEARCH in an RBTree is immediately O(log(n)), since the depth of an RBTree is O(log(n)).
• What about INSERT/DELETE?
• Turns out, you can INSERT and DELETE items from an RBTree in time O(log(n)), while maintaining the RBTreeproperty.
• That’s why this is a good property!
![Page 61: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/61.jpg)
INSERT/DELETE
• I expect we are out of time…
• There are some slides which you can check out to see how to do INSERT/DELETE in RBTrees if you are curious.
• See CLRS Ch 13. for even more details.
• You are not responsible for the details of INSERT/DELETE for RBTrees for this class.
• You should know what the “proxy for balance” property is and why it ensures approximate balance.
• You should know that this property can be efficiently maintained, but you do not need to know the details of how.
![Page 62: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/62.jpg)
INSERT: Many cases
73
6
73
6
73
6
• Suppose we want to insert 0 here.
• There are 3 “important” cases for different colorings of
the existing tree, and there are 9 more cases for all of
the various symmetries of these 3 cases.
![Page 63: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/63.jpg)
INSERT: Case 1
• Make a new red node.
• Insert it as you would normally.
73
6Example: insert 0
0
What if it looks like this?
73
6
![Page 64: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/64.jpg)
INSERT: Many cases
73
6
73
6
73
6
• Suppose we want to insert 0 here.
• There are 3 “important” cases for different colorings
of the existing tree, and there are 9 more cases for all
of the various symmetries of these 3 cases.
![Page 65: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/65.jpg)
• Make a new red node.
• Insert it as you would normally.
• Fix things up if needed.
73
6Example: insert 0
0
No!
What if it looks like this?
73
6
INSERT: Case 2
![Page 66: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/66.jpg)
• Make a new red node.
• Insert it as you would normally.
• Fix things up if needed.
73
6Example: insert 0
Can’t we just insert 0 as
a black node?
0No!
What if it looks like this?
73
6
INSERT: Case 2
![Page 67: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/67.jpg)
We need a bit more context
73
6
Example: insert 0
What if it looks like this?
73
6
-1
![Page 68: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/68.jpg)
We need a bit more context
73
6
Example: insert 0
0
What if it looks like this?
73
6
• Add 0 as a red node.
-1
![Page 69: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/69.jpg)
We need a bit more context
73
6
Example: insert 0
0
What if it looks like this?
73
6
Flip
colors!
• Add 0 as a red node.
• Claim: RB-Tree
properties still hold.
-1
![Page 70: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/70.jpg)
But what if that was red?
73
6
Example: insert 0
0
What if it looks like this?
73
6
-1
![Page 71: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/71.jpg)
More context…
73
6
Example: insert 0
0
What if it looks like this?
73
6
-1
-3
![Page 72: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/72.jpg)
More context…
6
Example: insert 0
What if it looks like this?
73
6
-1
-3
Now we’re basically
inserting 6 into some
smaller tree. Recurse!
This one!
![Page 73: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/73.jpg)
73
6
-1
-3
Want to
insert 0
here.
-4
-2
Example, part I
![Page 74: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/74.jpg)
73
6
0
-1
-3
-4
-2
Example, part I
![Page 75: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/75.jpg)
73
6
0
-1
-3
Flip colors!
-4
-2
Example, part I
![Page 76: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/76.jpg)
73
6
0
-1
-3
-4
-2
Example, part I
Want to
insert 6 here.
Need to know how
to insert into trees
that look like this…
![Page 77: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/77.jpg)
INSERT: Many cases
73
6
73
6
73
6
• Suppose we want to insert 0 here.
• There are 3 “important” cases for different colorings
of the existing tree, and there are 9 more cases for all
of the various symmetries of these 3 cases.
That’s this
case!
![Page 78: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/78.jpg)
• Make a new red node.
• Insert it as you would normally.
• Fix things up if needed.
73
6Example: Insert 0.• Maybe with a
subtree below it.
0
What if it looks like this?
73
6
INSERT: Case 3
![Page 79: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/79.jpg)
Recall Rotations
• Maintain Binary Search Tree (BST) property, while moving stuff around.
BA
CY
XYOINK!
That’s not binary!! CLAIM:
this still has BST property.
BA
C
Y
X
B
A
C
Y
X
![Page 80: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/80.jpg)
Inserting into a Red-Black Tree
• Make a new red node.
• Insert it as you would normally.
• Fix things up if needed.
73
6
0
What if it looks like this?
73
6
YOINK!
3
60
7
Argue that this is a
good thing to do!
![Page 81: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/81.jpg)
Example, part 2
73
6
0
-1
-3
-4
-2
Want to
insert 6 here.
![Page 82: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/82.jpg)
Example, part 2
73
6
0
-1
-3
-4
-2
73
6
0
-1
-3
-4 -2
YOINK!YOINK!
![Page 83: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/83.jpg)
Example, part 2
73
6
0
-1
-3
-4 -2
YOINK!
![Page 84: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/84.jpg)
73
6
0
-1
-3
-4 -2
Example, part 2 TA-DA!
![Page 85: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/85.jpg)
Many cases
73
6
73
6
73
6
• Suppose we want to insert 0 here.
• There are 3 “important” cases for different colorings
of the existing tree, and there are 9 more cases for all
of the various symmetries of these 3 cases.
![Page 86: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/86.jpg)
Deleting from a Red-Black tree
Fun exercise!
Ollie the over-achieving ostrich
![Page 87: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/87.jpg)
That’s a lot of cases!
• You are not responsible for the nitty-gritty details of Red-Black Trees. (For this class)
• Though implementing them is a great exercise!
• You should know:
• What are the properties of an RB tree?
• And (more important) why does that guarantee that they are balanced?
![Page 88: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/88.jpg)
What have we learned?
• Red-Black Trees always have height at most 2log(n+1).
• As with general Binary Search Trees, all operations are O(height)
• So all operations with RBTrees are O(log(n)).
![Page 89: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/89.jpg)
Conclusion: The best of both worlds
Sorted Arrays Linked ListsBinary Search
Trees*
Search O(log(n)) O(n) O(log(n))
Delete O(n) O(n) O(log(n))
Insert O(n) O(1) O(log(n))
![Page 90: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/90.jpg)
Today
• Begin a brief foray into data structures!
• See CS 166 for more!
• Binary search trees
• You may remember these from CS 106B
• They are better when they’re balanced.
this will lead us to…
• Self-Balancing Binary Search Trees
• Red-Black trees.
Recap
![Page 91: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/91.jpg)
Recap
• Balanced binary trees are the best of both worlds!
• But we need to keep them balanced.
• Red-Black Trees do that for us.
• We get O(log(n))-time INSERT/DELETE/SEARCH
• Clever idea: have a proxy for balance
42 8
73
5
6
![Page 92: Lecture 7 - Stanford Universityweb.stanford.edu/class/cs161/Lectures/Lecture7/Lecture7-compressed.pdf7 1 3 5 This node is the root This is a node. It has a key(7). These nodes are](https://reader036.vdocument.in/reader036/viewer/2022070711/5ec82a5e3d01be4e095091e1/html5/thumbnails/92.jpg)
Next time
• Hashing!
Before next time
• Pre-lecture exercise for Lecture 8
•More probability yay!