Download presentation
Presentation is loading. Please wait.
Published byMelissa Stanley Modified over 5 years ago
1
Binhai Zhu Computer Science Department, Montana State University
Binary search trees Binhai Zhu Computer Science Department, Montana State University Frequently, presenters must deliver material of a technical nature to an audience unfamiliar with the topic or vocabulary. The material may be complex or heavy with detail. To present technical material effectively, use the following guidelines from Dale Carnegie Training®. Consider the amount of time available and prepare to organize your material. Narrow your topic. Divide your presentation into clear segments. Follow a logical progression. Maintain your focus throughout. Close the presentation with a summary, repetition of the key steps, or a logical conclusion. Keep your audience in mind at all times. For example, be sure data is clear and information is relevant. Keep the level of detail and vocabulary appropriate for the audience. Use visuals to support key points or steps. Keep alert to the needs of your listeners, and you will have a more receptive audience. 7/4/2019
2
Definition Binary search tree:
(1) Each node, besides a key field and some satellite data, contains left, right, and p pointers that point to its left child, its right child and its parent. (2) The root is the only node whose parent field is NIL. Of course, all the leaves nodes have both NIL left field and NIL right field. 7/4/2019
3
Example root 10 7 14 9 16 5 leaf 2 6 8 leaf leaf leaf 7/4/2019
4
Operations Search 10 7 14 9 16 5 2 6 8 7/4/2019
5
Operations Search Minimum Maximum Predecessor Successor Insert Delete
10 7 14 9 16 5 2 6 8 7/4/2019
6
Binary search tree property
10 7 14 9 16 5 2 6 8 For any node x, let y be a node in the left tree of x, then key[y] ≤ key[x]. Likewise, if y is a node in the right subtree of x then key[x]≤key[y]. 7/4/2019
7
Binary search tree property
10 x 7 14 9 16 5 z y 2 6 8 For any node x, let y be a node in the left tree of x, then key[y] ≤ key[x]. Likewise, if z is a node in the right subtree of x then key[x]≤key[z]. 7/4/2019
8
Tree traversals Inorder Preorder Postorder 10 7 14 9 16 5 2 6 8
7/4/2019
9
Tree traversals Inorder(node x) If x ≠ NIL Inorder(x→left) print(x)
Inorder(x→right) 10 7 14 9 16 5 2 6 8 7/4/2019
10
Tree traversals Inorder(node x) If x ≠ NIL Inorder(x→left) print(x)
Inorder(x→right) 10 7 14 9 16 5 2 6 8 2,5,6,7,8,9,10,14,16 7/4/2019
11
Tree traversals Inorder(node x) If x ≠ NIL Inorder(x→left) print(x)
Inorder(x→right) 10 7 14 9 16 5 2 6 8 2,5,6,7,8,9,10,14,16 (that’s exactly the sorted ordering!) 7/4/2019
12
Tree traversals Preorder(node x) If x ≠ NIL print(x) Preorder(x→left)
Preorder(x→right) 10 7 14 9 16 5 2 6 8 7/4/2019
13
Tree traversals Preorder(node x) If x ≠ NIL print(x) Preorder(x→left)
Preorder(x→right) 10 7 14 9 16 5 2 6 8 10,7,5,2,6,9,8,14,16 7/4/2019
14
Tree traversals Postorder(node x) If x ≠ NIL Postorder(x→left)
Postorder(x→right) print(x) 10 7 14 9 16 5 2 6 8 7/4/2019
15
Tree traversals Postorder(node x) If x ≠ NIL Postorder(x→left)
Postorder(x→right) print(x) 10 7 14 9 16 5 2 6 8 2,6,5,8,9,7,16,14,10 7/4/2019
16
Tree traversals What is the running time? 10 7 14 9 16 5 2 6 8
7/4/2019
17
Minimum and Maximum 10 7 14 9 16 5 2 6 8 7/4/2019
18
Minimum and Maximum 10 Minimum(node x) while x → left ≠ NIL
do x ← x→left return x 7 14 9 16 5 2 6 8 7/4/2019
19
Minimum and Maximum 10 Minimum(node x) while x → left ≠ NIL
do x ← x→left return x Maximum(node x) while x → right ≠ NIL do x ← x→right 7 14 9 16 5 2 6 8 7/4/2019
20
Search x 10 7 14 9 16 5 k=11? 2 6 8 k=6 7/4/2019
21
Search Search(node x, k) if x = NIL or k =key[x] then return x
if x < key[x] then return Search(x→left,k) else return Search(x→right,k) x 10 7 14 9 16 5 2 6 8 k=6 7/4/2019
22
Search Search(node x, k) if x = NIL or k =key[x] then return x
if x < key[x] then return Search(x→left,k) else return Search(x→right,k) Iterative-Search(node x,k) while x≠NIL and k≠key[x] if k < key[x] then x ← x→left else x ← x→right return x x 10 7 14 9 16 5 2 6 8 k=6 7/4/2019
23
Successor The successor of x is the node with the smallest key greater than key[x]. 10 7 x 14 9 16 5 2 6 8 7/4/2019
24
Successor Successor(node x) if x→right ≠ NIL
then return Minimum(x→right) y ← x→p while y≠NIL and x==y→right x ← y y ← y→p return y Successor 10 7 14 9 16 5 x 2 6 8 7/4/2019
25
Successor Successor(node x) if x→right ≠ NIL
then return Minimum(x→right) y ← x→p while y≠NIL and x==y→right x ← y y ← y→p return y Successor 10 7 14 9 16 5 x 2 6 8 Search, Minimum, Maximum, Successor all run in O(h) time, where h is the height of the corresponding binary search tree. 7/4/2019
26
Insertion Insert a new node z with key[z]=v into a tree T. 10 7 14 9
16 5 2 6 8 9.5 z 7/4/2019
27
Insertion Insert(T,z) y ← NIL x ← root(T) While x ≠ NIL y ← x
if key[z] < key[x] then x ← x→left else x ← x→right z→p ← y x 10 7 14 9 16 5 9.5 2 6 8 z 7/4/2019
28
Insertion Insert(T,z) y ← NIL x ← root(T) While x ≠ NIL y ← x
if key[z] < key[x] then x ← x→left else x ← x→right z→p ← y y x 10 7 14 9 16 5 2 6 8 9.5 z 7/4/2019
29
Insertion Insert(T,z) y ← NIL x ← root(T) While x ≠ NIL y ← x
if key[z] < key[x] then x ← x→left else x ← x→right z→p ← y y 10 7 x 14 9 16 5 2 6 8 9.5 z 7/4/2019
30
Insertion Insert(T,z) y ← NIL x ← root(T) While x ≠ NIL y ← x
if key[z] < key[x] then x ← x→left else x ← x→right z→p ← y 10 y 7 x 14 9 16 5 2 6 8 9.5 z 7/4/2019
31
Insertion Insert(T,z) y ← NIL x ← root(T) While x ≠ NIL y ← x
if key[z] < key[x] then x ← x→left else x ← x→right z→p ← y 10 y 7 14 9 x 16 5 2 6 8 9.5 z 7/4/2019
32
Insertion Insert(T,z) y ← NIL x ← root(T) While x ≠ NIL y ← x
if key[z] < key[x] then x ← x→left else x ← x→right z→p ← y 10 7 14 y 9 16 5 x←NIL 9.5 2 6 8 z 7/4/2019
33
Insertion Insert(T,z) y ← NIL x ← root(T) While x ≠ NIL y ← x
if key[z] < key[x] then x ← x→left else x ← x→right z→p ← y 10 7 14 y 9 16 5 9.5 2 6 8 z 7/4/2019
34
Insertion Insert(T,z) y ← NIL x ← root(T) While x ≠ NIL y ← x
if key[z] < key[x] then x ← x→left else x ← x→right z→p ← y If y = NIL then root[T]←z else if key[z] < key [y] then y→left ← z else y→right ← z 10 7 14 y 9 16 5 9.5 2 6 8 z 7/4/2019
35
Deletion 10 z z 7 14 9 16 5 2 6 8 z 7/4/2019
36
Deletion 10 7 14 9 16 5 2 6 8 z 7/4/2019
37
Deletion 10 7 14 9 16 5 X 2 6 8 z 7/4/2019
38
Deletion 10 z 7 14 9 16 5 2 6 8 7/4/2019
39
Deletion 10 X z 7 14 X 9 16 5 2 6 8 7/4/2019
40
Deletion 10 z 7 14 9 16 5 2 6 8 7/4/2019
41
Deletion 10 z 7 14 9 16 5 2 6 8 Find the successor of z 7/4/2019
42
Deletion 10 z 8 14 9 16 5 2 6 8 Find the successor y of z
Replace z with y Delete y (careful, as y might have a right child) 7/4/2019
43
1. if z→left=NIL or z→right=NIL
then y ← z else y ← Successor(z) 4. if y→left≠NIL then x ← y→left else x ← y→right 7. if x ≠ NIL then x→p ← y→p 9. if y→p = NIL 10. then root[T] ← x else if y = (y→p)→left then (y→p)→left ← x else (y→p)→right ← x 14.if y≠z then key[z] ← key[y] copy y’s data into z 17.return y Deletion 10 z 7 z 14 9 16 5 2 6 8 z 8.5 7/4/2019
44
1. if z→left=NIL or z→right=NIL
then y ← z else y ← Successor(z) 4. if y→left≠NIL then x ← y→left else x ← y→right 7. if x ≠ NIL then x→p ← y→p 9. if y→p = NIL 10. then root[T] ← x else if y = (y→p)→left then (y→p)→left ← x else (y→p)→right ← x 14.if y≠z then key[z] ← key[y] copy y’s data into z 17.return y Deletion 10 z 7 z 14 y 9 16 5 2 6 8 y z y 8.5 7/4/2019
45
Deletion 10 z 7 z 14 y 9 x 16 5 2 6 8 y z y x 8.5 x=NIL
1. if z→left=NIL or z→right=NIL then y ← z else y ← Successor(z) 4. if y→left≠NIL then x ← y→left else x ← y→right 7. if x ≠ NIL then x→p ← y→p 9. if y→p = NIL 10. then root[T] ← x else if y = (y→p)→left then (y→p)→left ← x else (y→p)→right ← x 14.if y≠z then key[z] ← key[y] copy y’s data into z 17.return y Deletion 10 z 7 z 14 y 9 x 16 5 2 6 8 y z y x 8.5 x=NIL 7/4/2019
46
Deletion 10 z 7 z 14 y 9 x 16 5 2 6 8 y z y x 8.5 x=NIL
1. if z→left=NIL or z→right=NIL then y ← z else y ← Successor(z) 4. if y→left≠NIL then x ← y→left else x ← y→right 7. if x ≠ NIL then x→p ← y→p 9. if y→p = NIL 10. then root[T] ← x else if y = (y→p)→left then (y→p)→left ← x else (y→p)→right ← x 14.if y≠z then key[z] ← key[y] copy y’s data into z 17.return y Deletion 10 z 7 z 14 y 9 x 16 5 2 6 8 y z y x 8.5 x=NIL 7/4/2019
47
1. if z→left=NIL or z→right=NIL
then y ← z else y ← Successor(z) 4. if y→left≠NIL then x ← y→left else x ← y→right 7. if x ≠ NIL then x→p ← y→p 9. if y→p = NIL 10. then root[T] ← x else if y = (y→p)→left then (y→p)→left ← x else (y→p)→right ← x 14.if y≠z then key[z] ← key[y] copy y’s data into z 17.return y Deletion 10 X z 7 z 14 y X 9 x 16 5 X 2 6 8 y 8.5 x 7/4/2019
48
1. if z→left=NIL or z→right=NIL
then y ← z else y ← Successor(z) 4. if y→left≠NIL then x ← y→left else x ← y→right 7. if x ≠ NIL then x→p ← y→p 9. if y→p = NIL 10. then root[T] ← x else if y = (y→p)→left then (y→p)→left ← x else (y→p)→right ← x 14.if y≠z then key[z] ← key[y] copy y’s data into z 17.return y Deletion 10 z 7 z 14 y 9 x 16 5 2 6 8 y 8.5 x 7/4/2019
49
1. if z→left=NIL or z→right=NIL
then y ← z else y ← Successor(z) 4. if y→left≠NIL then x ← y→left else x ← y→right 7. if x ≠ NIL then x→p ← y→p 9. if y→p = NIL 10. then root[T] ← x else if y = (y→p)→left then (y→p)→left ← x else (y→p)→right ← x 14.if y≠z then key[z] ← key[y] copy y’s data into z 17.return y Deletion 10 z 8 z 14 y 9 x 16 5 2 6 8 y 8.5 x 7/4/2019
50
1. if z→left=NIL or z→right=NIL
then y ← z else y ← Successor(z) 4. if y→left≠NIL then x ← y→left else x ← y→right 7. if x ≠ NIL then x→p ← y→p 9. if y→p = NIL 10. then root[T] ← x else if y = (y→p)→left then (y→p)→left ← x else (y→p)→right ← x 14.if y≠z then key[z] ← key[y] copy y’s data into z 17.return y Deletion 10 z 8 z y 9 x 16 5 2 6 y 8.5 x 7/4/2019
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.