RedBlack Tree ์™œ(Why) ์ƒ๊ธด ๊ฒƒ์ผ๊นŒ์š”?

7,6,5,4,3,2,1 ์ˆœ์„œ๋Œ€๋กœ ์‚ฝ์ž…ํ•ด์„œ ์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree)๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?

  • ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ Tree๊ฐ€ ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค.

1์„ ์ฐพ์œผ๋ ค๊ณ  ํ•œ๋‹ค๋ฉด?

  • ํ•ญ์ƒ ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ์—†๊ฒ ์ฃ ?
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ Balanced binary search tree์˜ ํ•œ ์ข…๋ฅ˜์ธ RedBlack Tree์ž…๋‹ˆ๋‹ค.

RedBlack Tree๋ž€?

  • ๊ฐ ๋…ธ๋“œ์— ์ƒ‰๊น”์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒ‰๊น”์„ ๊ธฐ์ค€์œผ๋กœ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

RedBlack Tree Rule

  • ๋ชจ๋“  ๋…ธ๋“œ๋Š” RED์ด๊ฑฐ๋‚˜ BLACK์ด๋‹ค.
  • ๋ฃจํŠธ๋Š” BLACK์ด๋‹ค.
  • ๋ชจ๋“  ๋ฆฌํ”„(NIL)๋Š” BLACK์ด๋‹ค.
  • ๋…ธ๋“œ๊ฐ€ RED์ด๋ฉด ๊ทธ ๋…ธ๋“œ์˜ ์ž์‹์€ ๋ชจ๋‘ BLACK์ด๋‹ค. // NO Double Red
  • ๊ฐ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ทธ ๋…ธ๋“œ์˜ ์ž์†์ธ ๋ฆฌํ”„๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ์ˆ˜์˜ BLACK ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

NIL์„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด?

  • ํ•˜๋‚˜์˜ Node๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RedBlack Tree Insert

  • ์‚ฝ์ž…๋˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ƒ‰๊น”์€ RED๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

8,18,5,15,17,25,40,80

Step 1 : Insert 8

  • ๋ฃจํŠธ๋Š” ํ‘์ƒ‰์ธ ๊ทœ์น™์— ๋”ฐ๋ผ 8์„ ๋ธ”๋ž™์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

Step 2 : Insert 18

Step 3 : Insert 5

Step 4 : Insert 15

  • RED ๋…ธ๋“œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์—†๋‹ค ๊ทœ์น™์„ ์œ„๋ฐ˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฐ์†๋œ RED๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค๋ฉด ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    • Recoloring
      • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ํ˜•์ œ ์ƒ‰๊น”์ด RED์ธ ๊ฒฝ์šฐ
    • Restructuring
      • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ํ˜•์ œ ์ƒ‰๊น”์ด BLACK์ธ ๊ฒฝ์šฐ, NULL์ธ ๊ฒฝ์šฐ
  • ํ˜„์žฌ ์ƒํ™ฉ์€ 15 ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ํ˜•์ œ ์ƒ‰๊น”์ด RED์ด๊ธฐ ๋•Œ๋ฌธ์— Recoloring์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์™€ ๋ถ€๋ชจ ํ˜•์ œ๋…ธ๋“œ๋ฅผ BLACK์œผ๋กœ ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ RED๋กœ Coloringํ•ฉ๋‹ˆ๋‹ค.
    • ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ Root Node์ธ ๊ฒฝ์šฐ Root Node์ธ ๊ฒฝ์šฐ Black์ธ ๊ทœ์น™์— ์˜ํ•ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      • ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ Root node๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ Double Red๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Step 5 : Insert 17

  • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ํ˜•์ œ ์ƒ‰๊น”์ด NULL์ด๊ธฐ ๋•Œ๋ฌธ์— Restructuring์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฝ์ž…๋œ ๋…ธ๋“œ, ๋ถ€๋ชจ, ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ(Grand Parent) ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ค‘์•™ ๊ฐ’์„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋ฅผ ์ž์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๋œ ๋…ธ๋“œ๋ฅผ BLACK ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋ฅผ RED๋กœ Coloringํ•ฉ๋‹ˆ๋‹ค.

Step 6 : Insert 25

  • RED ๋…ธ๋“œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์—†๋‹ค ๊ทœ์น™์„ ์œ„๋ฐ˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ํ˜•์ œ ์ƒ‰๊น”์ด RED์ธ ๊ฒฝ์šฐ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.
    • Recoloring์œผ๋กœ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๊ฒŒ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์™€ ๋ถ€๋ชจ ํ˜•์ œ๋…ธ๋“œ๋ฅผ BLACK์œผ๋กœ ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ RED๋กœ Coloringํ•ฉ๋‹ˆ๋‹ค.

Step 7 : Insert 40

  • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ํ˜•์ œ ์ƒ‰๊น”์ด NULL์ด๊ธฐ ๋•Œ๋ฌธ์— Restructuring์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฝ์ž…๋œ ๋…ธ๋“œ, ๋ถ€๋ชจ, ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ(Grand Parent) ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ค‘์•™ ๊ฐ’์„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋ฅผ ์ž์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๋œ ๋…ธ๋“œ๋ฅผ BLACK ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋ฅผ RED๋กœ Coloringํ•ฉ๋‹ˆ๋‹ค.

Step 7 : Insert 80

  • RED ๋…ธ๋“œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์—†๋‹ค ๊ทœ์น™์„ ์œ„๋ฐ˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ํ˜•์ œ ์ƒ‰๊น”์ด RED์ธ ๊ฒฝ์šฐ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.
    • Recoloring์œผ๋กœ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๊ฒŒ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์™€ ๋ถ€๋ชจ ํ˜•์ œ๋…ธ๋“œ๋ฅผ BLACK์œผ๋กœ ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ RED๋กœ Coloringํ•ฉ๋‹ˆ๋‹ค.
  • Recoloring์ด ๋๋‚œ ์ดํ›„์— ๋ณด๋‹ˆ Double Red๊ฐ€ ์žฌ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
    • 25 ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ํ˜•์ œ ์ƒ‰๊น”์ด BLACK์ด๊ธฐ ๋•Œ๋ฌธ์— Restructuring์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      • ์‚ฝ์ž…๋œ ๋…ธ๋“œ, ๋ถ€๋ชจ, ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ(Grand Parent) ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
      • ์ค‘์•™ ๊ฐ’์„ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋ฅผ ์ž์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      • ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๋œ ๋…ธ๋“œ๋ฅผ BLACK ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋ฅผ RED๋กœ Coloringํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ Step์— ์˜คํƒ€๋กœ Node 8 โ†’ Node 10์œผ๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.

RedBlack Tree Remove

  • RB ํŠธ๋ฆฌ์—์„œ ๊ฒ€์ •์ƒ‰ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ์œผ๋กœ RB ํŠธ๋ฆฌ์˜ ์†์„ฑ์ด ๊นจ์ง€์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Insert ๋•Œ ๊ณ ๋ คํ–ˆ๋˜ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ rotation์„ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ค๋งŒ ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ๋Š” ๊ทธ๋ƒฅ ์‚ญ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

RedBlack Tree ๋ณต์žก๋„(Complexity)์— ๋Œ€ํ•ด

AlgorithmAverageWorst case
SpaceO(n)O(n)
SearchO(log n)O(log n)
InsertO(log n)O(log n)
DeleteO(log n)O(log n)

AVL Tree์™€ Red Black Tree ์ฐจ์ด์— ๋Œ€ํ•ด

  • AVL Tree๊ฐ€ Red Black Tree๋ณด๋‹ค ๋น ๋ฅธ Search๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • AVL Tree๊ฐ€ ๋” ์—„๊ฒฉํ•œ Balanced๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • Red Black Tree์€ AVL Tree๋ณด๋‹ค ๋น ๋ฅธ ์‚ฝ์ž…๊ณผ ์ œ๊ฑฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • AVL Tree๋ณด๋‹ค Balanced๋ฅผ ๋Š์Šจํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • Red Black Tree๋Š” AVL Tree๋ณด๋‹ค ์ƒ‰๊น”์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ Space Complexity๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Red Black Trees๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์˜ map, multimap, multiset์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • AVL tree๋Š” ์กฐํšŒ์— ์†๋„๊ฐ€ ์ค‘์š”ํ•œ Database์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Reference