Presentation is loading. Please wait.

Presentation is loading. Please wait.

Binhai Zhu Computer Science Department, Montana State University

Similar presentations


Presentation on theme: "Binhai Zhu Computer Science Department, Montana State University"— Presentation transcript:

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


Download ppt "Binhai Zhu Computer Science Department, Montana State University"

Similar presentations


Ads by Google