Red-Black Trees—Again

29
Red-Black Trees—Again rank(x) = # black pointers on path from x to an external node. Same as #black nodes (excluding x) from x to an external node. rank(external node) = 0.

description

Red-Black Trees—Again. rank(x) = # black pointers on path from x to an external node. Same as #black nodes (excluding x ) from x to an external node. rank(external node) = 0. 10. 7. 40. 45. 3. 8. 30. 0. 0. 0. 60. 35. 1. 20. 5. 0. 0. 0. 0. 0. 0. 0. 0. 0. 25. 0. 0. - PowerPoint PPT Presentation

Transcript of Red-Black Trees—Again

Page 1: Red-Black Trees—Again

Red-Black Trees—Again

• rank(x) = # black pointers on path from x to an external node.

• Same as #black nodes (excluding x) from x to an external node.

• rank(external node) = 0.

Page 2: Red-Black Trees—Again

An Example

10

7

8

1 5

30

40

20

25

35

45

60

3

0 0 0 0

0 0

0

0 0

0 0

0

0 0

1 1

1 1

1

1 1 1

2 1

22

3

Page 3: Red-Black Trees—Again

Properties Of rank(x)

• rank(x) = 0 for x an external node.

• rank(x) = 1 for x parent of external node.

• p(x) exists => rank(x) <= rank(p(x)) <= rank(x) + 1.

• g(x) exists => rank(x) < rank(g(x)).

Page 4: Red-Black Trees—Again

Red-Black Tree

A binary search tree is a red-black tree iff integer ranks can be assigned to its nodes so as to satisfy the stated 4 properties of rank.

Page 5: Red-Black Trees—Again

Relationship Between rank() And Color

• (p(x),x) is a red pointer iff rank(x) = rank(p(x)).

• (p(x),x) is a black pointer iff rank(x) = rank(p(x)) – 1.

• Red node iff pointer from parent is red.

• Root is black.

• Other nodes are black iff pointer from parent is black.

• Given rank(root) and node/pointer colors, remaining ranks may be computed on way down.

Page 6: Red-Black Trees—Again

rank(root)

• Height <= 2 * rank(root).

• No external nodes at levels 1, 2, …, rank(root). So, #nodes >= 1 <= i <= rank(root) 2i -1 = 2 rank(root) – 1.

So, rank(root) <= log2(n+1).

• So, height(root) <= 2log2(n+1).

Page 7: Red-Black Trees—Again

Join(S,m,B)• Input

Dictionary S of pairs with small keys. Dictionary B of pairs with big keys. An additional pair m. All keys in S are smaller than m.key. All keys in B are bigger than m.key.

• Output A dictionary that contains all pairs in S and B

plus the pair m. Dictionaries S and B may be destroyed.

Page 8: Red-Black Trees—Again

Join Binary Search Trees

• O(1) time.

S

m

B

Page 9: Red-Black Trees—Again

Join Red-black Trees

• When rank(S) = rank(B), use binary search tree method.

S

m

B

• rank(root) = rank(S) + 1 = rank(B) + 1.

Page 10: Red-Black Trees—Again

rank(S) > rank(B)• Follow right child pointers from root of S to first node

x whose rank equals rank(B).

a b

x

p(x)

S

a b

x

p(x)

m

B

Page 11: Red-Black Trees—Again

rank(S) > rank(B)• If there are now 2 consecutive red pointers/nodes,

perform bottom-up rebalancing beginning at m.

• O(rank(S) – rank(B)).

a b

x

p(x)

S

a b

x

p(x)

m

B

Page 12: Red-Black Trees—Again

rank(S) < rank(B)

• Follow left child pointers from root of B to first node x whose rank equals rank(B).

• Similar to case when rank(S) > rank(B).

Page 13: Red-Black Trees—Again

Split(k)

• Inverse of join.

• Obtain S … dictionary of pairs with key < k. B … dictionary of pairs with key > k. m … pair with key = k (if present).

Page 14: Red-Black Trees—Again

Split A Binary Search Tree

b

A

a B

c

C

d

D

e

E

f

m

g

S B

Page 15: Red-Black Trees—Again

Split A Binary Search Tree

b

A

a

B

c

C

d

D

e

E

f

m

g

BS

Page 16: Red-Black Trees—Again

Split A Binary Search Tree

b

A

a

B

c

C

d

D

e

E

f

m

g

BS

Page 17: Red-Black Trees—Again

Split A Binary Search Tree

b

A

a

B

c

C

d

D

e

E

f

m

g

BS

Page 18: Red-Black Trees—Again

Split A Binary Search Tree

b

A

a

B

c

C

d

D

e

E

f

m

g

BS

Page 19: Red-Black Trees—Again

Split A Binary Search Tree

b

A

a

B

c

C

d

D

e

E

f

m

g

BS

Page 20: Red-Black Trees—Again

Split A Binary Search Tree

b

A

a

B

c

C

d

D

e

E

fm

g

BS

Page 21: Red-Black Trees—Again

Split A Red-Black Tree

• Previous strategy does not split a red-black tree into two red-black trees.

• Must do a search for m followed by a traceback to the root.

• During the traceback use the join operation to construct S and B.

Page 22: Red-Black Trees—Again

Split A Red-Black Tree

b

A

a B

c

C

d

D

e

E

f

m

g

S = f B = g

Page 23: Red-Black Trees—Again

Split A Red-Black Tree

b

A

a B

c

C

d

D

e

E

S = f B = g

Page 24: Red-Black Trees—Again

Split A Red-Black Tree

b

A

a B

c

C

d

D

e

E

S = f B = g

S = join(e, E, S)

Page 25: Red-Black Trees—Again

Split A Red-Black Tree

b

A

a B

c

C

d

D

S = f B = g

S = join(e, E, S)

B = join(B, D, d)

Page 26: Red-Black Trees—Again

Split A Red-Black Tree

b

A

a B

c

C

S = f B = g

S = join(e, E, S)

B = join(B, D, d)

S = join(c, C, S)

Page 27: Red-Black Trees—Again

Split A Red-Black Tree

b

A

a B

S = f B = g

S = join(e, E, S)

B = join(B, D, d)

S = join(c, C, S)

B = join(B, B, b)

Page 28: Red-Black Trees—Again

Split A Red-Black TreeA

a

S = f B = g

S = join(e, E, S)

B = join(B, D, d)

S = join(c, C, S)

B = join(B, B, b)

S = join(a, A, S)

Page 29: Red-Black Trees—Again

Complexity Of Split

• O(log n)

• See text.