comp2100/6442 tree data structure...3 admin –android studio •android studio in lab computers...

51
Sid Chi-Kin Chau COMP2100/6442 Software Design Methodologies / Software Construction Tree Data Structures

Upload: others

Post on 17-Feb-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

Sid Chi-Kin Chau

COMP2100/6442

Software Design Methodologies / Software Construction

Tree Data Structures

Page 2: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

2

Admin

• The individual assignment due is this Friday

– Make sure you follow the submission guideline

– No late submission allowed

• Lab 3 next week (trees)

– This week’s lab contains examinable items

– The goal is to implement what we will learn today

– Please attend and get help from tutors

Page 3: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

3

Outline

• Tree data structure

• Binary Search Tree

• Red-Black Tree

Page 4: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

4

Data structure

• What’s the purpose of data structure?

– Simplest form: variable

– More than 1 variable: array

• Data structure helps us to store and

manage data set.

– Tree

– Graph

– Linked list

– Hash map, etc.

Page 5: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

5

Tree data structure

• Nodes & Edges

• Natural data structure for hierarchical

dataset

• No self-loops

• No Cycle

Page 6: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

6

Binary Search Tree (BST)

• BST: tree with at most two

children for each node

1. left child node is smaller than its

parent node

2. right child node is greater than

its parent node

• Data structures that can support

dynamic set operations

– Search, Minimum, Maximum,

Predecessor, Successor, Insert,

and Delete

x.key

x.left.key x.right.key

Page 7: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

7

BST – Representation

• Represented by a linked data structure of

nodes

• root[T] points to the root of tree T

• Each node contains fields:

– key

– left – pointer to left child: root of left subtree

– right – pointer to right child : root of right subtree

– p – pointer to parent. p[root[T]] = NIL (optional)

Page 8: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

8

Binary Search Tree Property

• Stored keys must

satisfy the binary

search tree property

– y in left subtree of x,

then key[y] key[x]

– y in right subtree of

x, then key[y] key[x]

56

26 200

18 28 190 213

24 27

Page 9: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

9

Traversing BST

• How to traverse tree given root?

• Used to print out the data in a tree in a

certain order

– Or apply some operation to each node

• Recursive traverse methods:

– In-order traversing

– Pre-order traversing

– Post-order traversing

Page 10: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

10

Inorder Traversal

Inorder-Tree-Walk (x)

1. if x null

2. then Inorder-Tree-Walk(left[x])

3. print key[x]

4. Inorder-Tree-Walk(right[x])

• Output: 12, 18, 24, 26, 27, 28, 56, 190, 200, 213

• How long does the walk take?

1. Traverse the left subtree

2. Visit the root

3. Traverse the right subtree56

26 200

18 28 190 213

12 24 27

Page 11: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

11

Preorder Traversal

Preorder-Tree-Walk (x)

1. if x null

2. then print key[x]

3. Preorder-Tree-Walk(left[x])

4. Preorder-Tree-Walk(right[x])

• Output: 56, 26, 18, 12, 24, 28, 27, 200, 190, 213

1. Visit the root

2. Traverse the left subtree

3. Traverse the right subtree56

26 200

18 28 190 213

12 24 27

Page 12: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

12

Postorder Traversal

Postorder-Tree-Walk (x)

1. if x null

2. then Postorder-Tree-Walk(left[x])

3. Postorder-Tree-Walk(right[x])

4. print key[x]

• Output: 12, 24, 18, 27, 28, 26, 190, 213, 200, 56

56

26 200

18 28 190 213

12 24 27

1. Traverse the left subtree

2. Traverse the right subtree

3. Visit the root

Page 13: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

13

BST Insertion Tree-Insert(T, z)

1. y null

2. x root[T]

3. while x null

4. do y x

5. if key[z] < key[x]

6. then x left[x]

7. else x right[x]

8. p[z] y

9. If y = null

10. then root[T] z

11. else if key[z] < key[y]

12. then left[y] z

13. else right[y] z

• Ensure the binary-search-tree property holds after change.

• A new key is always inserted at the leaf node

56

26 200

18 28 190 213

12 24 27

Page 14: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

14

Predecessor and Successor

• Successor of node x is the node y such that key[y] is the smallest key greater than key[x]

• The successor of the largest key is NIL

• Search consists of two cases– If node x has a non-empty right subtree, then x’s

successor is the minimum in the right subtree of x

– If node x has an empty right subtree, then:

• As long as we move to the left up the tree (move up through right children), we are visiting smaller keys

• x’s successor y is the node that x is the predecessor of (x is the maximum in y’s left subtree)

• In other words, x’s successor y, is the lowest ancestor of xwhose left child is also an ancestor of x

Page 15: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

15

Pseudo-code for Successor

Tree-Successor(x)

1. if right[x] null

2. then return Tree-Minimum(right[x])

3. y p[x]

4. while y null and x = right[y]

5. do x y

6. y p[y]

7. return y

Code for predecessor is symmetric.

56

26 200

18 28 190 213

12 24 27

What’s the successor of 28?

Page 16: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

16

Tree-Delete (T, x)

1. If x has no children case 0

– then remove x

2. If x has one child case 1

– then make p[x] point to child

3. If x has two children (subtrees) case 2

– then replace x with its successor

– Delete successor in subtree // case 0 or 1

Page 17: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

17

Delete: Examples

• Case 0

– Remove 12

• Case 1

– Remove 28

– P[27]=26

• Case 2

– Remove 26• Replace 26 with 27

• Remove 27 from subtree

56

26 200

18 28 190 213

12 24 27

Page 18: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

18

Delete: Examples 2

• Case 2

– Remove 26

• Replace 26 with 28

• Remove 28 from

subtree (case 1)

56

26 200

18 28 190 213

12 24 33

Page 19: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

19

Red-Black TreeBalanced Tree

Page 20: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

20

Worse case scenario

• Insert 6, 5, 4, 3, 2, 1 in an empty tree in

order

• Depth of tree linear increases

6

5

4

3

2

1

4

6

5

2

31

Unbalanced tree Balanced tree

Page 21: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

21

Balanced Tree

• Balanced search tree

• A search-tree data structure with a height of

O(lg n) is always guaranteed for n items

• Height = maximum # edges from root to node

• Examples

• AVL trees

• Red-black treesh ≈ lg n

Page 22: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

22

Red-Black Tree

• Balanced tree• Tree structure requires an extra one-bit color field in

each node: either red or black• Node:

• Key• Color• Left• Right• Parent• (Data)

Page 23: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

23

Red-Black Properties

• The red-black properties:

1. Every node is either red or black

2. Root and leaves (NULL node) are black

• Note: this means every “real” node has 2 children

3. If a node is red, both children are black

• Note: can’t have 2 consecutive reds on a path

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 24: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

24

Red-Black Trees: An Example

• Valid example: 7

5 9

1212

5 9

7

Red-black properties:

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 25: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

25

• Insert 8

– Where does it go?

The Problem With Insertion

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

7

5 9

1212

5 9

7

Page 26: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

26

• Insert 8

– Where does it go?

– What color

should it be?

The Problem With Insertion

12

5 9

7

8

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 27: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

27

• Insert 8

– Where does it go?

– What color

should it be?

The Problem With Insertion

12

5 9

7

8

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 28: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

28

The Problem With Insertion

• Insert 11

– Where does it go?

12

5 9

7

8

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 29: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

29

The Problem With Insertion

• Insert 11

– Where does it go?

– What color? 12

5 9

7

8

11

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 30: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

30

The Problem With Insertion

• Insert 11

– Where does it go?

– What color?

• Can’t be red! (#3)

12

5 9

7

8

11

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 31: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

31

The Problem With Insertion

• Insert 11

– Where does it go?

– What color?

• Can’t be red! (#3)

• Can’t be black! (#4)

12

5 9

7

8

11

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 32: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

32

The Problem With Insertion

• Insert 11

– Where does it go?

– What color?

• Solution:

recolor the tree

12

5 9

7

8

11

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 33: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

33

The Problem With Insertion

• Insert 10

– Where does it go?

12

5 9

7

8

11

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 34: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

34

The Problem With Insertion

• Insert 10

– Where does it go?

– What color? 12

5 9

7

8

11

10

1. Every node is either red or black

2. Root and every leaf (NULL pointer) are black

3. If a node is red, both children are black

4. Every path from node to descendent leaf

contains the same number of black nodes

Page 35: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

35

The Problem With Insertion

• Insert 10

– Where does it go?

– What color?

• A: no color! Tree

is too imbalanced

• Must change tree structure

to allow recoloring

– Goal: restructure tree

12

5 9

7

8

11

10

Page 36: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

36

RB Trees: Rotation

• Our basic operation for changing tree structure is called rotation:

• Does rotation preserve inorder key ordering?

• What would the code for rightRotate()actually do?

y

x C

A B

x

A y

B C

rightRotate(y)

leftRotate(x)

Page 37: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

37

rightRotate(y)

RB Trees: Rotation

• Answer: A lot of pointer manipulation

– x keeps its left child

– y keeps its right child

– x’s right child becomes y’s left child

– x’s and y’s parents change

• What is the running time?

y

x C

A B

x

A y

B C

Page 38: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

38

Rotation Example

• Rotate left about 9:

12

5 9

7

8

11

Page 39: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

39

Rotation Example

• Rotate left about 9:

5 12

7

9

118

Page 40: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

40

Red-Black Trees: Insertion

• Insertion: the basic idea

– Insert x into tree, color x red

– Only r-b property 3 might be violated (if p[x]

red)

• If so, move violation up tree until a place is found

where it can be fixed

– Total time will be O(lg n)

Page 41: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

41

Three possible cases:

• Given that the parent of the inserted node

is left child of grand parent

1. Inserted node’s “uncle” is red

2. Inserted node is right child and its “uncle”

is black

3. Inserted node is left child and its “uncle is

black”

Page 42: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

42

RB Insert: Case 1if (y->color == RED)

x->p->color = BLACK;

y->color = BLACK;

x->p->p->color = RED;

x = x->p->p;

• Case 1: “uncle” is red

• In figures below, all ’s

are equal-black-height

subtrees

C

A D

B

C

A D

B

x

y

new x

Change colors of some nodes, preserving #4: all downward paths have equal b.h.

The while loop now continues with x’s grandparent as the new x

case 1

Page 43: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

43

B

x

RB Insert: Case 1 (or 4)if (y->color == RED)

x->p->color = BLACK;

y->color = BLACK;

x->p->p->color = RED;

x = x->p->p;

• Case 1: “uncle” is red

• In figures below, all ’s

are equal-black-height

subtrees

C

A D

C

A D

y

new x

Same action whether x is a left or a right child

B

x

case 1

Page 44: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

44

B

x

RB Insert: Case 2if (x == x->p->right)

x = x->p;

leftRotate(x);

// continue with case 3 code

• Case 2:

– “Uncle” is black

– Node x is a right child

• Transform to case 3 via a

left-rotation

C

A C

By

A

x

case 2

y

Transform case 2 into case 3 (x is left child) with a left rotation

This preserves property 4: all downward paths contain same number of black nodes

Page 45: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

45

RB Insert: Case 3x->p->color = BLACK;

x->p->p->color = RED;

rightRotate(x->p->p);

• Case 3:

– “Uncle” is black

– Node x is a left child

• Change colors; rotate

right

B

Ax

case 3C

B

A

x

y C

Perform some color changes and do a right rotation

Again, preserves property 4: all downward paths contain same number of black nodes

Page 46: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

46

RB Insert: Cases 4-6

• Cases 1-3 hold if x’s parent is a left child

• If x’s parent is a right child, cases 4-6 are

symmetric (swap left for right)

Page 47: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

47

Red-Black Trees: Deletion

• And you thought insertion was tricky…

• We will not cover RB delete in class

• Read Chapter 14 of Introduction to

algorithms if you are interested.

Page 48: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

64

Summary

• Binary Search Tree

– Unbalanced

• Red-Black Tree

– Remember 5 properties

• B-Tree

– Can have multiple keys

– Example code available athttps://gitlab.cecs.anu.edu.au/u1009226/comp2100-

lecture/tree/master/src/comp2100/tree/btree

Page 49: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

65

Lab task

• Task 1:

– Recursive definition of BST

– Implement INSERT in BST

– Implement REMOVE in BST

• Task 2:

– Implement INSERT, ROTATE in red-black tree

Page 50: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

66

References

• Slides

– U of Virginia, UCS332 by David Luebke

– Comp122, U of North Caroline

• Further reading

– Introduction to algorithms (Chap14)http://staff.ustc.edu.cn/~csli/graduate/algorithms/book6/chap14.htm

– Lecture Notes on Red/Black Trees by Frank

Pfenninghttps://www.cs.cmu.edu/~fp/courses/15122-f10/lectures/17-rbtrees.pdf

Page 51: COMP2100/6442 Tree Data Structure...3 Admin –Android Studio •Android studio in Lab computers –SDK 27 •Current version of Android studio –SDK 28+ •To work with both environment:

67

Acknowledgement

The lecture slides are based on those of

previous instructors:

• Dongwoo Kim

• Eric McCreath