Top Banner
CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001
32

CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

CSE 326Binary Search Trees

David Kaplan

Dept of Computer Science & EngineeringAutumn 2001

Page 2: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 20012

Binary TreesBinary tree is

a root left subtree (maybe empty) right subtree (maybe

empty)

Properties max # of leaves: max # of nodes: average depth for N nodes:

Representation:

A

B

D E

C

F

HG

JIDataright

pointerleft

pointer

Page 3: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 20013

Binary Tree Representation

Aright child

leftchild

A

B

D E

C

F

Bright child

leftchild

Cright child

leftchild

Dright child

leftchild

Eright child

leftchild

Fright child

leftchild

Page 4: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 20014

Dictionary ADTDictionary operations

create destroy insert find delete

Stores values associated with user-specified keys

values may be any (homogeneous) type

keys may be any (homogeneous) comparable type

AdrienRoller-blade

demon

HannahC++ guru

DaveOlder than dirt

insert

find(Adrien) Adrien Roller-blade demon

Donald l33t haxtor

Page 5: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 20015

Dictionary ADT:

Used Everywhere Arrays Sets Dictionaries Router tables Page tables Symbol tables C++ structures …

Anywhere we need to find things fast based on a key

Page 6: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 20016

Search ADTDictionary operations

create destroy insert find delete

Stores only the keys keys may be any (homogenous) comparable quickly tests for membership

Simplified dictionary, useful for examples (e.g. CSE 326)

AdrienHannahDave

insert

find(Adrien) Adrien

Donald

Page 7: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 20017

Dictionary Data Structure:

Requirements Fast insertion

runtime:

Fast searching runtime:

Fast deletion runtime:

Page 8: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 20018

Naïve Implementationsunsortedarray

sortedarray

linked list

insert O(n) find + O(n)

O(1)

find O(n) O(log n) O(n)

delete find + O(1)(mark-as-deleted)

find + O(1)(mark-as-deleted)

find + O(1)

Page 9: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 20019

Binary Search Tree Dictionary Data Structure

4

121062

115

8

14

13

7 9

Binary tree property each node has 2 children result:

storage is small operations are simple average depth is small

Search tree property all keys in left subtree

smaller than root’s key all keys in right subtree

larger than root’s key result:

easy to find any given key Insert/delete by changing links

Page 10: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200110

Example and Counter-Example

3

1171

84

5

4

181062

115

8

20

21BINARY SEARCH TREENOT A

BINARY SEARCH TREE

7

15

Page 11: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200111

Complete Binary Search TreeComplete binary search tree(aka binary heap):

Links are completely filled, except possibly bottom level, which is filled left-to-right.

7 1793

155

8

1 4 6

Page 12: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200112

In-Order Traversal

visit left subtreevisit nodevisit right subtree

What does this guarantee with a BST?

2092

155

10

307 17

In order listing:25791015172030

Page 13: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200113

Recursive Find

Node *

find(Comparable key, Node * t)

{

if (t == NULL) return t;

else if (key < t->key)

return find(key, t->left);

else if (key > t->key)

return find(key, t->right);

else

return t;

}

2092

155

10

307 17

Runtime:Best-worse case?Worst-worse case?f(depth)?

Page 14: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200114

Iterative Find

Node *find(Comparable key, Node * t){ while (t != NULL && t->key != key) { if (key < t->key) t = t->left; else t = t->right; }

return t;}

2092

155

10

307 17

Page 15: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200115

Insertvoid

insert(Comparable x, Node * t)

{

if ( t == NULL ) {

t = new Node(x);

} else if (x < t->key) {

insert( x, t->left );

} else if (x > t->key) {

insert( x, t->right );

} else {

// duplicate

// handling is app-dependent

}

Concept: Proceed down tree

as in Find If new key not

found, then insert a new node at last spot traversed

Page 16: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200116

BuildTree for BSTs Suppose the data 1, 2, 3, 4, 5, 6, 7, 8, 9 is

inserted into an initially empty BST: in order

in reverse order

median first, then left median, right median, etc.

Page 17: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200117

Analysis of BuildTreeWorst case is O(n2)

1 + 2 + 3 + … + n = O(n2)

Average case assuming all orderings equally likely: O(n log n) averaging over all insert sequences (not over all binary

trees) equivalently: average depth of a node is log n proof: see Introduction to Algorithms, Cormen, Leiserson, &

Rivest

Page 18: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200118

BST Bonus:

FindMin, FindMax Find minimum

Find maximum

2092

155

10

307 17

Page 19: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200119

Successor NodeNext larger nodein this node’s subtree

2092

155

10

307 17

How many children can the successor of a node have?

Node * succ(Node * t) {

if (t->right == NULL)

return NULL;

else

return min(t->right);

}

Page 20: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200120

Predecessor Node

2092

155

10

307 17

Next smaller nodein this node’s subtree

Node * pred(Node * t) {

if (t->left == NULL)

return NULL;

else

return max(t->left);

}

Page 21: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200121

Deletion

2092

155

10

307 17

Why might deletion be harder than insertion?

Page 22: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200122

Lazy DeletionInstead of physically deleting nodes, just mark them as deleted

+ simpler+ physical deletions done in

batches+ some adds just flip deleted flag

- extra memory for deleted flag

- many lazy deletions slow finds

- some operations may have to be modified (e.g., min and max)

2092

155

10

307 17

Page 23: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200123

Lazy Deletion

2092

155

10

307 17

Delete(17)

Delete(15)

Delete(5)

Find(9)

Find(16)

Insert(5)

Find(17)

Page 24: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200124

Deletion - Leaf Case

2092

155

10

307 17

Delete(17)

Page 25: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200125

Deletion - One Child Case

2092

155

10

307

Delete(15)

Page 26: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200126

Deletion - Two Child Case

3092

205

10

7Delete(5)

Replace node with descendant whose value is guaranteed to be between left and right subtrees: the successor

Could we have used predecessor instead?

Page 27: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200127

Delete Codevoid delete(Comparable key, Node *& root) {

Node *& handle(find(key, root));

Node * toDelete = handle;

if (handle != NULL) {

if (handle->left == NULL) { // Leaf or one child

handle = handle->right;

delete toDelete;

} else if (handle->right == NULL) { // One child

handle = handle->left;

delete toDelete;

} else { // Two children

successor = succ(root);

handle->data = successor->data;

delete(successor->data, handle->right);

}

}

}

Page 28: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200128

Thinking about

Binary Search TreesObservations

Each operation views two new elements at a time Elements (even siblings) may be scattered in

memory Binary search trees are fast if they’re shallow

Realities For large data sets, disk accesses dominate runtime Some deep and some shallow BSTs exist for any data

Page 29: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200129

Beauty is Only (log n) DeepBinary Search Trees are fast if they’re shallow:

perfectly complete complete – possibly missing some “fringe” (leaves) any other good cases?

What matters? Problems occur when one branch is much longer than

another i.e. when tree is out of balance

Page 30: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200130

Dictionary Implementations

BST’s looking good for shallow trees, i.e. if Depth is small (log n); otherwise as bad as a linked list!

unsortedarray

sortedarray

linkedlist

BST

insert

O(n) find + O(n)

O(1) O(Depth)

find O(n) O(log n) O(n) O(Depth)

delete

find + O(1)(mark-as-deleted)

find + O(1)(mark-as-deleted)

find + O(1)

O(Depth)

Page 31: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200131

Digression: Tail Recursion Tail recursion: when the tail (final

operation) of a function recursively calls the function

Why is tail recursion especially bad with a linked list?

Why might it be a lot better with a tree? Why might it not?

Page 32: CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.

Binary Search Trees

CSE 326 Autumn 200132

Making Trees Efficient:

Possible SolutionsKeep BSTs shallow by maintaining

“balance”AVL trees

… also exploit most-recently-used (mru) infoSplay trees

Reduce disk access by increasing branching factorB-trees