Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
71 views28 pages

CS 253: Algorithms: Binary Search Trees

The document summarizes binary search trees. It describes how they are represented as linked data structures with nodes containing keys and data. It explains that they satisfy the binary search tree property where all nodes in the left subtree of a node have keys less than the node's key, and all nodes in the right subtree have keys greater than the node's key. Basic operations like search, insert, delete, finding minimum/maximum, and predecessor/successor are supported. Searching has worst-case linear time but average logarithmic time. Traversals like inorder, preorder and postorder are described. Methods for searching, finding minimum/maximum, successors, predecessors and insertion are provided with pseudocode.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views28 pages

CS 253: Algorithms: Binary Search Trees

The document summarizes binary search trees. It describes how they are represented as linked data structures with nodes containing keys and data. It explains that they satisfy the binary search tree property where all nodes in the left subtree of a node have keys less than the node's key, and all nodes in the right subtree have keys greater than the node's key. Basic operations like search, insert, delete, finding minimum/maximum, and predecessor/successor are supported. Searching has worst-case linear time but average logarithmic time. Traversals like inorder, preorder and postorder are described. Methods for searching, finding minimum/maximum, successors, predecessors and insertion are provided with pseudocode.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 28

CS 253: Algorithms

Chapter 12

Binary Search Trees

Credit: Dr. George Bebis


Binary Search Trees
 Tree representation:
◦ A linked data structure in which
each node is an object

parent
 Node representation: L R
key data
◦ Key field
◦ Data
◦ Left: pointer to left child
◦ Right: pointer to right child Left child Right child
◦ p: pointer to parent
(p [root [T]] = NIL)

 Satisfies the binary-search-tree


property (see the next slide)
2
Binary Search Tree Property

Ify is in left subtree of node x, 5


then key [y] ≤ key [x]
3 7

If 2 4 9
y is in right subtree of node x,
then key [y] ≥ key [x]

3
Binary Search Trees
 Support many dynamic set operations
◦ SEARCH
◦ INSERT, DELETE
◦ MINIMUM, MAXIMUM
◦ PREDECESSOR, SUCCESSOR

 Running time of basic operations on binary search trees


◦ On average: (lgn)
 The expected height of the tree is lgn

◦ In the worst case: (n)


 The tree is a linear chain of n nodes
Worst Case

5
Traversing a Binary Search Tree
Inorder tree walk:
 Root is printed between the values of its left and right subtrees:
left, root, right  keys are printed in sorted order

Preorder tree walk: root printed first: root, left, right

Postorder tree walk: root printed last: left, right, root

5 Inorder: 234 5 79

Preorder: 5 3 24 7 9
3 7

2 4 9 Postorder: 2 4 3 9 7 5
6
Traversing a Binary Search Tree
Alg: INORDER-TREE-WALK(x)
1. if x  NIL
2. then INORDER-TREE-WALK ( left [x] )
3. print key [x]
4. INORDER-TREE-WALK ( right [x] )

E.g.:
5

3 7
Output: 2 3 4 5 7 9
2 4 9

 Running time:
◦ (n), where n is the size of the tree rooted at x
Facts
 It is possible to construct a unique Binary Search Tree
given only PREORDER traversal of the BST

 It is possible to construct a unique Binary Search Tree


given only POSTORDER traversal of the BST

 It is not possible to construct a unique Binary Search Tree given


only INORDER traversal of a BST

However

It is not possible to construct a unique Binary Tree given


only INORDER or only POSTORDER or only PREORDER
traversal of a Binary Tree.
Searching for a Key
 Given a pointer to the root of a tree and a key k:
 Return a pointer to a node with key k if one exists
 Otherwise return NIL
5

3 7
2 4 9

 Start at the root; trace down a path


by comparing k with the key of the current node x:
 If the keys are equal: we have found the key
 If k < key[x] search in the left subtree of x
 If k > key[x] search in the right subtree of x
Example: TREE-SEARCH

15
 Search for key 13:
6 18
3 7 17 20 15  6  7  13
2 4 13
9

10
Searching for a Key
Alg: TREE-SEARCH(x, k)

1. if x = NIL or k = key [x]


2. then return x
3. if k < key [x]
4. then return TREE-SEARCH(left [x], k )
5. else return TREE-SEARCH(right [x], k )

5
Running Time:

O (h), h – the height of the tree 3 7

2 4 9
Finding the Minimum in a Binary Search Tree

Goal: find the minimum value in a BST


Following left child pointers from the
root, until a NIL is encountered
15

Alg: TREE-MINIMUM(x) 6 18
1. while left [x]  NIL 3 7 17 20
2. do x ← left [x] 2 4 13
3. return x 9

Minimum = 2

Running time
O(h), h – height of tree
Finding the Maximum in a Binary Search Tree

Goal: find the maximum value in a BST


Following right child pointers from the
root, until a NIL is encountered
15

Alg: TREE-MAXIMUM(x)
6 18
1. while right [x]  NIL
3 7 17 20
2. do x ← right [x]
2 4 13
3. return x
9

Maximum = 20

Running time
O(h), h – height of tree
13
Successor
Def: successor (x ) = y, such that key [y] is the
smallest key > key [x]
15
e.g.: successor (15) = 17
successor (13) = 15
6 18
successor (9) = 13
successor (20) =? 3 7 17
y
20

2 4 13
 Case 1: right (x) is non empty 9 x
successor (x ) = the minimum in right (x)

 Case 2: right (x) is empty


◦ go up the tree until the current node is a left child:
successor (x ) is the parent of the current node
◦ if you cannot go further (and you reached the root):
x is the largest element (no successor!)
Finding the Successor
Alg: TREE-SUCCESSOR(x)
1. if right [x]  NIL % Case 1
2. then return TREE-MINIMUM(right [x])
3. y ← p[x] % Case 2 - y parent of x
4. while y  NIL and x == right [y]
5. do x ← y 15

6. y ← p[y] y
6 18
7. return y
3 7 17 20
x
2 4 13
Running time:
9
O (h), h – height of the tree

Exercise: if x=20, what does this algorithm return?


Predecessor
Def: predecessor (x ) = y such that
key [y] is the biggest key < key [x]
15
e.g.: predecessor (15)13= y
x
predecessor (9) 7= 6 18
predecessor (7)6= 3 7 17 20
2 4 13
 Case 1: left (x) is non empty 9
◦ predecessor (x ) = the maximum in left (x)

 Case 2: left (x) is empty


◦ go up the tree until the current node is a right child:
predecessor (x ) is the parent of the current node
◦ if you cannot go further (and you reached the root):
x is the smallest element
Insertion
Goal: Insert value v into a binary search tree

Idea:
If key [x] < v move to the right child of x Insert value 13
else move to the left child of x 12
When x == NIL, we found the correct position
If v<key [y] insert the new node as y’s left child 5 18
else insert it as y’s right child 2 9 15 19
1 3 13 17
Begining at the root, go down the tree and maintain:
Pointer x : traces the downward path (current node)
Pointer y : parent of x (“trailing pointer” )
Example: TREE-INSERT

Insert 13: x=root[T], y=NIL y


12 12
x
5 18 5 18
2 9 15 19 2 9 15 19
1 3 17 1 3 17

12 12

x y
5 18 5 18
2 9 15 19 2 9 15 19
1 3 17 1 3 13 17
x = NIL
y = 15
Alg: TREE-INSERT(T, z)

1. y ← NIL
2. x ← root [T]
12
3. while x ≠ NIL
4. do y ← x
5 18
5. if key [z] < key [x]
2 9 15 19
6. then x ← left [x]
1 3 13 17
7. else x ← right [x]
8. p[z] ← y
9. if y = NIL
10. then root [T] ← z % Tree T was empty
11. else if key [z] < key [y]
12. then left [y] ← z
13. else right [y] ← z

Running time: O(h)


Deletion
Goal: Delete a given node z from a binary search tree

Case 1: z has no children


 Delete z by making the parent of z point to NIL

15 15

5 16 5 16

3 12 20 3 12 20
z
10 13 18 23 10 18 23

6 delete 6

7 7
20
Deletion
Case 2: z has one child
 Delete z by making the parent of z point to z’s child, instead of to z
And parent of z becomes the parent of z’s child.

15 delete 15
z
5 16 5 20

3 12 20 3 12 18 23

10 13 18 23 10

6 6

7 7

21
Deletion
Case 3: z has two children
 z’s successor (y) is the minimum node in z’s right subtree
 y has either no children or one right child (but no left child)
 Delete y from the tree (via Case 1 or 2)
 Replace z’s key and satellite data with y’s.

6 15 15
delete z
5 16 6 16

3 12 20 3 12 20

10 13 18 23 10 13 18 23

y 6 7

7
22
TREE-DELETE(T, z)
1. if left[z] = NIL or right[z] = NIL
2. then y ← z % z has at most one child: Case 1 or 2

3. else y ← TREE-SUCCESSOR(z) % z has 2 children: Case 3


<y will be deleted>
z
4. if left[y]  NIL 15 y
5. then x ← left[y] 5 16
x
6. else x ← right[y] 3 12 20
7. if x  NIL
10 13 18 23
8. then p[x] ← p[y]
6

7
TREE-DELETE(T, z) – cont.
<Exercise: check the correctness
of the pointer movements
below>
15 y
9. if p[y] = NIL
10. then root[T] ← x 5 16
x
11. else if y = left[p[y]] 3 12 20
12. then left[p[y]] ← x
10 13 18 23
13. else right[p[y]] ← x
6
14. if y  z
15. then key[z] ← key[y] 7

16. copy y’s satellite data into


z
17. return ytime:
Running O(h) due to TREE-SUCCESSOR operation
Binary Search Trees - Summary
Operations on binary search trees:
◦ SEARCH O(h)
◦ PREDECESSOR O(h)
◦ SUCCESSOR O(h)
◦ MINIMUM O(h)
◦ MAXIMUM O(h)
◦ INSERT O(h)
◦ DELETE O(h)

These operations are fast if the height of the tree is small

Theorem 12.4
The expected height of a randomly built binary search tree
on n distinct keys is O(lgn)
25
Problems
 Exercise 12.1-2
What is the difference between the MAX-HEAP
property and the binary search tree property?

Can the min-heap property be used to print out the keys


of an n-node tree in sorted order in O(n) time?
A: No. (sorting can not be done in O(n))

Add’l exercise:
 Can you use the heap property to design an efficient
algorithm that searches for an item in a binary tree?
A: no, it will be very inefficient! (why?)

26
Problems
Let x be the root node of a binary search tree (BST). Write
an algorithm BSTHeight(x) that determines the height of
the tree. What would be its running time?

Alg: BSTHeight(x)
if (x==NULL) return -1;
else
return max(BSTHeight(left[x]), BSTHeight(right[x]))
+1;

This program should not take more than O(n) time. Why?
Problems
 In a binary search tree, are the insert and delete operations commutative?

 Insert:
◦ Start with only 10 in a BST and try to insert 4 followed by 6
Then change the order of insertions and try again

 Delete
◦ Delete 5 followed by 6 in the following tree
◦ Then Delete 6 followed by 5

4 4 4

2 6 2 8 2 7

5 8 7 8

You might also like