1 / 29

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. 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.

betsy
Download Presentation

Red-Black Trees—Again

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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.

  2. 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 An Example 3 2 2 1 1 1 2 1 1 1 1 1 1

  3. 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)).

  4. 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.

  5. 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.

  6. rank(root) • Height <= 2 * rank(root). • No external nodes at levels 1, 2, …, rank(root). • So, #nodes >= S1 <= i <= rank(root) 2i -1 = 2 rank(root) – 1. • So, rank(root) <= log2(n+1). • So, height(root) <= 2log2(n+1).

  7. 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.

  8. m S B Join Binary Search Trees • O(1) time.

  9. m S B Join Red-black Trees • When rank(S) = rank(B), use binary search tree method. • rank(root) = rank(S) + 1 = rank(B) + 1.

  10. p(x) p(x) m x S B x a b a b rank(S) > rank(B) • Follow right child pointers from root of S to first node x whose rank equals rank(B).

  11. p(x) p(x) m x S B x a b a b 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)).

  12. 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).

  13. 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).

  14. S B A B a C b D c E d m e f g Split A Binary Search Tree

  15. S B Split A Binary Search Tree B A C b a D c E d m e f g

  16. S B Split A Binary Search Tree A B C a b D c E d m e f g

  17. S B Split A Binary Search Tree A B a b C D c E d m e f g

  18. S B Split A Binary Search Tree A B a b D C d c E m e f g

  19. S B Split A Binary Search Tree A B a b D C d c E e m f g

  20. S B Split A Binary Search Tree A B a b D C g d c E e f m

  21. 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.

  22. S = f B = g A B a C b D c E d m e f g Split A Red-Black Tree

  23. A B a C b D c E d e Split A Red-Black Tree S = f B = g

  24. A B a C b D c E d e Split A Red-Black Tree S = f B = g S = join(e, E, S)

  25. Split A Red-Black Tree S = f B = g A B a S = join(e, E, S) C b B = join(B, D, d) D c d

  26. Split A Red-Black Tree S = f B = g A B a S = join(e, E, S) C b B = join(B, D, d) S = join(c, C, S) c

  27. Split A Red-Black Tree S = f B = g A B a S = join(e, E, S) b B = join(B, D, d) S = join(c, C, S) B = join(B, B, b)

  28. Split A Red-Black Tree S = f B = g A a 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)

  29. Complexity Of Split • O(log n) • See text.

More Related