EECS 311: Chapter 4 Notes Chris Riesbeck EECS Northwestern.
-
Upload
baldwin-warner -
Category
Documents
-
view
214 -
download
0
Transcript of EECS 311: Chapter 4 Notes Chris Riesbeck EECS Northwestern.
EECS 311: Chapter 4 Notes
Chris RiesbeckEECS Northwestern
Unless otherwise noted, all tables, graphs and code from Mark Allen Weiss' Data Structures and Algorithm Analysis in C++, 3rd ed, copyright © 2006 by Pearson Education, Inc.
Binary Search Trees
Binary Search Tree
Not a Binary Search Tree
BST with = left/right depths
AVL Trees
AVL Tree
Not AVL Tree
Right Rotation
Rotate right when left left subtree
too deep
Right subtree of k1…
becomes left subtree of k2
Parent pointer to k2… changed to
point to k1
Left Rotation
Rotate left when right right
subtree too deep
Left-Right Rotation
Rotate k2 left through k1 first…
When right subtree of left
subtree too deep…then rotate k2 right through k3
Red-Black Trees
AVL-style rotations to balance No numbers, just one red-black bit
per node (or link) Use rotations and recoloring to
guarantee: Never two red nodes in a row All leaves same depth counting black
nodes
Rotations in Red-Black Trees
Recoloring in Red-Black Trees
Splay Tree Balance on access, not insertion Use AVL-style rotations Move item just accessed to the root Typically makes tree shallower Complexity
Can be O(N) worst case single access O(M log N) on for M accesses Amortized O(log N)
No bookkeeping data needed
Zig-zag Rotation
Zig-zig Rotation
B-Trees No rotations N-way tree (N subtrees, N-1 keys) Keys sorted in each node When passing through a full node:
Make a new node Move the keys and pointers on the right to the
new node Move middle key and the pointer to the new
node to parent node Note: parent can't be full. Why?
Adding and splitting
now add 57
After adding 55
now add 55
After adding 57
now add 40
After adding 40