๐Ÿ”ดโšซ๏ธ Red-Black Tree์˜ ์‚ฝ์ž… ์—ฐ์‚ฐ

์„คํ˜„์•„ยท2025๋…„ 4์›” 18์ผ

๐Ÿ‘‰ RB Tree์˜ ์†์„ฑ

  1. ๋ชจ๋“  ๋…ธ๋“œ๋Š” red ํ˜น์€ black ์˜ ์ƒ‰์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.(1 bit)
  2. root ๋…ธ๋“œ๋Š” black์ด๋‹ค.
  3. ๋ชจ๋“  NIL(leaf ๋…ธ๋“œ)๋Š” black์ด๋‹ค.
  4. red ๋…ธ๋“œ๋Š” ์—ฐ๋‹ฌ์•„ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์—†๋‹ค.(red ๋…ธ๋“œ์˜ ์ž์‹ ์–‘์ชฝ์€ ์–ธ์ œ๋‚˜ black)
  5. ์ž„์˜์˜ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ NIL ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ์˜ black ์ˆ˜๋Š” ๊ฐ™๋‹ค.(๋ณธ์ธ ์ œ์™ธ)

๐Ÿ‘‰ ์ด์—์„œ ํŒŒ์ƒ๋˜๋Š” ๊ทœ์น™

  • 5๋ฒˆ ์†์„ฑ์„ ๋งŒ์กฑํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‘ ์ž๋…€๊ฐ€ ๊ฐ™์€ ์ƒ‰์„ ๊ฐ€์งˆ ๋•Œ, ๋ถ€๋ชจ์™€ ๋‘ ์ž๋…€์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”๋„ ์—ฌ์ „ํžˆ ์†์„ฑ์„ ๋งŒ์กฑํ•œ๋‹ค.
  • ์ถ”๊ฐ€๋˜๋Š” ๋…ธ๋“œ๋Š” ํ•ญ์ƒ red์˜ ์ƒ‰์„ ๊ฐ€์ง„๋‹ค.

์ด ์†์„ฑ๊ณผ ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฝ์ž… ์—ฐ์‚ฐ๋„ ์ด๋ฃจ์–ด์ง€๋‹ˆ ์ ์–ด๋‘๊ณ  ์‹œ์ž‘ํ•˜์ž!

์œ„์˜ ์†์„ฑ๊ณผ ๊ทœ์น™์—์„œ ์šฐ๋ฆฌ๋Š” ์‚ฝ์ž… ์—ฐ์‚ฐ์„ ํ•  ๋–„ ์–ด๋–ค ๋ถ€๋ถ„์„ ์‹ ๊ฒฝ์จ์ฃผ์–ด์•ผ ํ•˜๋Š” ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
1. ์ถ”๊ฐ€ํ•˜๋Š” ๋…ธ๋“œ์˜ ์ƒ‰์€ red์ด๋‹ค. 2. ์ถ”๊ฐ€๋ฅผ ํ•˜๊ณ  ์†์„ฑ์„ ์œ„๋ฐฐํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  RB Tree์˜ ์†์„ฑ์„ ๋ณด๋ฉด ์‚ฝ์ž…์‹œ ์–ด๋–ค ์†์„ฑ์ด ์œ„๋ฐ˜๋  ์ง€ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ ์‚ฝ์ž…์‹œ ์œ„๋ฐ˜๋˜๋Š” ์†์„ฑ

์‚ฝ์ž… ํ›„์—๋Š” ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ์†์„ฑ์ด ์œ„๋ฐ˜๋  ์ˆ˜ ์žˆ๋‹ค.
2๋ฒˆ "root ๋…ธ๋“œ๋Š” black์ด๋‹ค." ์†์„ฑ
4๋ฒˆ "reds ๋…ธ๋“œ๋Š” ์—ฐ๋‹ฌ์•„ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์—†๋‹ค." ์†์„ฑ

์‚ฝ์ž…ํ•˜๋Š” ์œ„์น˜๊ฐ€ root์ผ ๋•Œ 2๋ฒˆ์— ์œ„๋ฐ˜, ์‚ฝ์ž…ํ•˜๋Š” ์œ„์น˜์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ red์ผ ๋•Œ 4๋ฒˆ์— ์œ„๋ฐ˜๋œ๋‹ค.
๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ์—๋Š” Insert-fixup ์ ˆ์ฐจ๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ๊ท ํ˜•์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

์ด์ œ ๋ชจ๋“  case์—์„œ ์–ด๋–ป๊ฒŒ fixup ์ ˆ์ฐจ๊ฐ€ ์ง„ํ–‰๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž!


RB Tree Insert-fixup

๊ณ„์† ๊ฐ•์กฐํ•˜๋‹ค์‹œํ”ผ, ์‚ฝ์ž… ๋˜๋”๋ผ๋„ ์†์„ฑ์ด ์œ ์ง€๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
์‚ฝ์ž…์€ ๋ฌด์กฐ๊ฑด red๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

CASE 1๏ธโƒฃ: ๋น„์–ด์žˆ๋Š” ํŠธ๋ฆฌ

red ๋…ธ๋“œ๋กœ ์‚ฝ์ž…์ด ์ด๋ฃจ์–ด์ง€์ง€๋งŒ, ์†์„ฑ 2๋ฒˆ("root ๋…ธ๋“œ๋Š” black์ด๋‹ค.")์„ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋ฃจํŠธ์˜ ์ƒ‰์„ black์œผ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.

CASE 2๏ธโƒฃ: ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ black


์‚ฝ์ž…ํ•  ๋…ธ๋“œ๋Š” red์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฝ์ž…ํ•ด์ค€ ์ดํ›„์— ๋ณ„๋„์˜ ์กฐ์ •์ด ํ•„์š” ์—†๋‹ค.

CASE 3๏ธโƒฃ : ํŠธ๋ฆฌ ์ค‘๊ฐ„์—์„œ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ red์ง€๋งŒ ์กฐ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

CASE 2๊ณผ ์ผ๋งฅ์ƒํ†ตํ•œ๋‹ค.
์–ด๋–ค ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ • ์ค‘์— root ๋…ธ๋“œ๊ฐ€ red๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ,
์†์„ฑ 2๋ฒˆ("root ๋…ธ๋“œ๋Š” black์ด๋‹ค.")์„ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋ฃจํŠธ์˜ ์ƒ‰์„ black์œผ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.

์ด๋Š” ์•„๋ž˜ CASE 4์—์„œ๋„ ๋“ฑ์žฅํ•œ๋‹ค.

CASE 4๏ธโƒฃ: ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์‚ผ์ดŒ ๋…ธ๋“œ๊ฐ€ red, ์กฐ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” black

์‚ฝ์ž…ํ•  ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์‚ผ์ดŒ ๋…ธ๋“œ๊ฐ€ ์ „๋ถ€ red๋ผ๋ฉด ์†์„ฑ 4๋ฒˆ์— ์œ„๋ฐฐ๋œ๋‹ค.(red ๋…ธ๋“œ๋Š” ์—ฐ๋‹ฌ์•„ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์—†๋‹ค.)

์ด ๋•Œ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์ด ์žˆ๋‹ค.
"5๋ฒˆ ์†์„ฑ์„ ๋งŒ์กฑํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‘ ์ž๋…€๊ฐ€ ๊ฐ™์€ ์ƒ‰์„ ๊ฐ€์งˆ ๋•Œ, ๋ถ€๋ชจ์™€ ๋‘ ์ž๋…€์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”๋„ ์—ฌ์ „ํžˆ ์†์„ฑ์„ ๋งŒ์กฑํ•œ๋‹ค."

์ด์— ๋”ฐ๋ผ
1. ๋ถ€๋ชจ/์‚ผ์ดŒ ๋…ธ๋“œ(์œ„ ๊ทœ์น™์—์„œ ๋‘ ์ž๋…€)์˜ ์ƒ‰, ์กฐ๋ถ€๋ชจ ๋…ธ๋“œ(์œ„ ๊ทœ์น™์—์„œ ๋ถ€๋ชจ)์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”์ฃผ์–ด๋„ ๊ท ํ˜•์€ ์œ ์ง€๋œ๋‹ค.
2. root๋Š” black์ด์–ด์•ผ ํ•˜๋Š” ์†์„ฑ์— ๋”ฐ๋ผ root์˜ ์ƒ‰์€ ๋‹ค์‹œ black์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.(CASE3)

๋‹จ, ์กฐ๋ถ€๋ชจ(20)์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๊ณ  red ๋…ธ๋“œ๋ผ๋ฉด ๋˜ ๋‹ค์‹œ ์–ด๋А CASE์— ์†ํ•˜๋Š” ์ง€ ํŒ๋‹จํ•˜๊ณ  ์žฌ์กฐ์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

CASE 5๏ธโƒฃ: ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ red, ์‚ผ์ดŒ ๋…ธ๋“œ๊ฐ€ black, ์กฐ๋ถ€๋ชจ์˜ ๋‚ด๋ถ€ ์†์ž์ธ ๊ฒฝ์šฐ

๋‚ด๋ถ€ ์†์ž?
ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ๋ดค์„ ๋•Œ ์กฐ๋ถ€๋ชจ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊บพ์ธ ๋ชจ์–‘์˜ ์•ˆ ์ชฝ์— ์†์ž ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
์ฆ‰, ์กฐ๋ถ€๋ชจ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์†์ž ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
๋˜๋Š” ์กฐ๋ถ€๋ชจ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์†์ž ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.


์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.

์ด ๋•Œ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์ธ 10์„ ์กฐ๋ถ€๋ชจ ๋…ธ๋“œ์ธ 20์˜ ์œ„์น˜๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๊ธฐ ๋•Œ๋ฌธ์—(๊ท ํ˜•์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด) ์šฐ์„  CASE 6์˜ ์กฐ๊ฑด์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
CASE 6์€ ๊บพ์ธ ํ˜•ํƒœ์˜ ๋‚ด๋ถ€ ์†์ž๋ฅผ ์ผ์ž ํ˜•ํƒœ์˜ ์™ธ๋ถ€ ์†์ž๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
๊ธ€๋กœ๋Š” ์ดํ•ด๊ฐ€ ์–ด๋ ค์šฐ๋‹ˆ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด์ž

์ด์ œ 10 ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ CASE 6์˜ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•œ๋‹ค.
CASE 6์„ ์‚ดํŽด๋ณด์ž.

CASE 6๏ธโƒฃ: ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ red, ์‚ผ์ดŒ ๋…ธ๋“œ๊ฐ€ black, ์กฐ๋ถ€๋ชจ์˜ ์™ธ๋ถ€ ์†์ž์ธ ๊ฒฝ์šฐ

์™ธ๋ถ€ ์†์ž?
ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ๋ดค์„ ๋•Œ ์กฐ๋ถ€๋ชจ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ผ์ž ํ˜•ํƒœ๋กœ ์ž์‹ ๋…ธ๋“œ, ์†์ž ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
์ฆ‰, ์กฐ๋ถ€๋ชจ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์†์ž ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
๋˜๋Š” ์กฐ๋ถ€๋ชจ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์†์ž ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ด ๋•Œ๋Š” ์กฐ๋ถ€๋ชจ๋ฅผ ๊ธฐ์ค€์œผ๋กœ rotate๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์‹œ์ผœ, ๋ถ€๋ชจ๋…ธ๋“œ(15)๋ฅผ ์กฐ๋ถ€๋ชจ๋…ธ๋“œ(20)์˜ ์œ„์น˜๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์กฐ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์ƒ‰์„ ๋ฐ”๊ฟ”์ค€๋‹ค.

์˜ˆ์ œ


์œ„์˜ ์˜ˆ์ œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ RB Tree์— ์‚ฝ์ž…ํ•ด๋ณด์ž.

์—…๋กœ๋“œ์ค‘..

๋ณต์žกํ•˜๊ธด ํ•˜์ง€๋งŒ,

๋ถ€๋ชจ์™€ ์‚ผ์ดŒ์„ ๋ณด๋ฉด์„œ ์–ด๋–ค CASE์— ํ•ด๋‹น๋˜๋Š”์ง€ ์ž˜ ๋”ฐ๋ผ๊ฐ€์ž!

profile
์–ด์„œ์˜ค์„ธ์š”! โ˜บ๏ธ ํ›„ํšŒ ์—†๋Š” ๋‚ด์ผ์„ ์œ„ํ•ด ์˜ค๋Š˜์„ ์—ด์‹ฌํžˆ ์‚ด์•„๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€