

๋ฐ๋ผ์, ์๋์ ์ผ์ด์ค๋ค๋ก ๋ฌธ์ ๊ฐ ๋๋ ์ง๊ฒ ๋๋ค. ์ฆ, ํธ๋ฆฌ๋ฅผ ๋ฆฌ๋ฐธ๋ฐ์ฑํ์ฌ ์์ 5๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋๋ก ๋ง๋ค์ด์ผ ํ๋ค!
์ฝ์ ๋ red ๋ ธ๋๊ฐ ๋ถ๋ชจ์ ์ผ์ชฝ ์๋ && ๋ถ๋ชจ๋ red๊ณ ํ ์๋ฒ์ง์ ์ผ์ชฝ ์๋ && ๋ถ๋ชจ์ ํ์ ๋ black : case 3
-> ๋ถ๋ชจ์ ํ ์๋ฒ์ง์ ์์ ๋ฐ๊พผํ ํ ์๋ฒ์ง ๊ธฐ์ค ์ค๋ฅธ์ชฝ์ผ๋ก ํ์
์ฝ์ ๋ red ๋ ธ๋๊ฐ ๋ถ๋ชจ์ ์ค๋ฅธ์ชฝ ์๋ && ๋ถ๋ชจ๋ red๊ณ ํ ์๋ฒ์ง์ ์ผ์ชฝ ์๋ && ๋ถ๋ชจ์ ํ์ ๋ black : case 2
-> ๋ถ๋ชจ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ผ๋ก ํ์ ํ ๋ค ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์ . ์ฆ case 3๋ก ๋ฐ๊พผ ๋ค ํด๊ฒฐ.
์ฝ์ ๋ red ๋ ธ๋์ ๋ถ๋ชจ๊ฐ red && ๋ถ๋ชจ์ ํ์ ๋ red : case 1
-> ๋ถ๋ชจ์ ๋ถ๋ชจ์ ํ์ ๋ฅผ black์ผ๋ก ๋ฐ๊พธ๊ณ ํ ์๋ฒ์ง๋ฅผ red๋ก ๋ฐ๊พผ ๋ค ํ ์๋ฒ์ง์์ ๋ค์ ํ์ธ ์์(๋์ด ์๋)
๋จ, rbtree์์๋ ์ด๋ค ์์ด ์ญ์ ๋๋์ง๊ฐ ์์ฑ ์๋ฐ ์ฌ๋ถ๋ฅผ ํ์ธํ ๋ ์ค์ํ๋ค.
๋ถ๋ชจ๋ก ํ๊ณ ์ฌ๋ผ๊ฐ๋ฉด์ ๋ธ๋์ด๋ฉด ๊ณ์ while๋ฌธ์ ๋๋ค.
๊ฒฐ๊ตญ doubly black์ด๋๊ฑด ๋ถ๋ชจ๊ฐ ๋ธ๋์ผ ๋๋ฅผ ๋งํ๋ ๊ฒ!
while (ํ๊ฒ์ด ๋ฃจํธ์๋ && ํ๊ฒ == BLACK) {
// CASE 1.
if **ํ์ == RED**
ํ์ /๋ถ๋ชจ ์๋ก ์๋ฐ๊พธ๊ธฐ, ๋ถ๋ชจ๊ธฐ์ค ํ์ (ํ๊ฒ์ด ๋ด๋ ค๊ฐ๋๋ก)
// CASE 2.
if **ํ์ == BLACK, ํ์ ์ ์์ ๋๋ค ๋ธ๋**
ํ์ /์์ ์ ๋ธ๋์ ๋ถ๋ชจ๋ก ์ฌ๋ฆฌ๊ธฐ -> ํ์ ๋ฅผ RED๋ก ๋ณ๊ฒฝ, ๋ถ๋ชจ์์ ๋ค์ fixup
else {
// CASE 3.
if ํ์ == BLACK, (**ํ์ ์ ๊บพ์ธ ์์**) == RED
์์ RED์ ํ์ ์๋ก ์๋ฐ๊พธ๊ธฐ, ํด์ง๊ฒ ํ์ (RED๊ฐ ๋ฐ๊นฅ์ชฝ์ ์ค๊ฒ)
CASE 4๊ฐ ๋จ
// CASE 4. ํ์ == BLACK, (**ํ์ ์ ํด์ง ์์**) == RED
๋ถ๋ชจ/ํ์ ์๋ก ์๋ฐ๊พธ๊ธฐ
ํ์ ์(ํด์ง ์์) = BLACK
๋ถ๋ชจ๊ธฐ์ค ํ์ (ํ๊ฒ์ด ๋ด๋ ค๊ฐ๋๋ก)
ํ๊ฒ์ ๋ฃจํธ๋ก ์ค์ -> while ์ข
๋ฃ
}
}
// ์ข
๋ฃ์
ํ๊ฒ์ BLACK์ผ๋ก ๋ณ๊ฒฝ