BST์ ํน์ฑ์ ์ ์งํ๋ฉด์ ์ญ์ ํ ํ, ์ญ์ ํ ๋
ธ๋์ ์์๋
ธ๋ ๊ฐ์์ ๋ฐ๋ผ rotation ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ง๋ค.
๋ํ, ์ง์์ง ๋
ธ๋์ ์๊น์ด Black์ด๋ผ๋ฉด, Black-Height๊ฐ 1๊ฐ์ํ ๊ฒฝ๋ก์ black node๊ฐ 1๊ฐ ์ถ๊ฐ๋๋๋ก rotaionํ๋ค.
NULL node(leaf node) ์ญ์ black ์ด๋ค.
๐ด case default : ์ญ์ ํ ๋
ธ๋๋ฅผ z๋ผ ํ ๋, z๊ฐ RED๋ผ๋ฉด ๊ทธ๋ฅ ์ญ์ ํ๊ณ , (z์ ์์์ด ๋๊ฐ์ธ ๊ฒฝ์ฐ๋ ์ค๋ฅธ์ชฝ ์์์ ๊ฐ์ฅ ์์ key์ key๊ฐ์ ๊ตํ ํ z->right์ minimum ๋
ธ๋๋ฅผ ์ญ์ ํ๊ฒ ๋๋ฏ๋ก ์ด ๋
ธ๋์ ์์ด RED๋ผ๋ฉด)
BLACK์ด๋ผ๋ฉด, black-height๊ฐ ์๋ง๊ฒ ๋๋ฏ๋ก fix up์ ์ํํ๋ค. (์ด๋, double-black๊ฐ๋
์ด ๋ฑ์ฅํ๋ค.)
์ญ์ ๋ ์ฝ์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ญ์ ํ ๋
ธ๋ z๋์ ์์นํ ๋
ธ๋ x๊ฐ p[x]์ ์ผ์ชฝ ์์์ธ์ง ์ค๋ฅธ์ชฝ ์์์ธ์ง์ ๋ํด ๋์นญํ๋ค.
์ญ์ ํ ๋
ธ๋ z๋์ ์๋ก ์์นํ ๋
ธ๋๋ฅผ x, ๊ทธ ํ์ ๋
ธ๋๋ฅผ s๋ผ๊ณ ํ ๋,
๐ด case 1 : s๊ฐ RED์ธ ๊ฒฝ์ฐ
์ด๋๋ s์ ์์๋ค์ leafNode ์ผ ์ ์๋ค.(์กฐ๊ฑด 5 ์๋ฐ) => ํ๊ฐ๋ผ๋ leafnode์ผ ์ black-heigh๊ฐ ๋ฌ๋ผ์ง๋ฏ๋ก ๋ฌด์กฐ๊ฑด ๋๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๐ธ x๊ฐ ๋ถ๋ชจ๋
ธ๋ p[x]์ ์ผ์ชฝ ์์์ผ๋
- s๋ฅผ BLACK์ผ๋ก p[x]๋ฅผ RED๋ก ๋ฐ๊ฟ์ค๋ค.
- p[x]๋ฅผ left-Rotate ์์ผ์ค๋ค.
- x์ ์๋ก์ด ํ์ ๋
ธ๋๋ฅผ ๋ฌ์์ค๋ค. (s = p[x]->right) ==> x์ ์๋ก์ด ํ์ ๋
ธ๋๋ ์๋ s์ ์ผ์ชฝ ์์๋
ธ๋ (left-Rotate์์ผ์ฃผ์๊ธฐ ๋๋ฌธ)
๐ธ x๊ฐ ๋ถ๋ชจ๋
ธ๋ p[x]์ ์ค๋ฅธ์ชฝ ์์์ผ๋
- s๋ฅผ BLACK์ผ๋ก p[x]๋ฅผ RED๋ก ๋ฐ๊ฟ์ค๋ค.
- p[x]๋ฅผ right-Rotate ์์ผ์ค๋ค.
- x์ ์๋ก์ด ํ์ ๋
ธ๋๋ฅผ ๋ฌ์์ค๋ค. (s = p[x]->left) ==> x์ ์๋ก์ด ํ์ ๋
ธ๋๋ ์๋ s์ ์ผ์ชฝ ์์๋
ธ๋ (left-Rotate์์ผ์ฃผ์๊ธฐ ๋๋ฌธ)
์์ง double-black์ด ๋จ์๊ธฐ ๋๋ฌธ์ case 2/3/4๋ฅผ ์งํํ๋ค.
๐ด case 2 :s๊ฐ BLACK, s์ ์์๋ค๋ BLACK์ผ๋
- x์ double-blackd์ ์ง์ฐ๊ณ s๋ฅผ RED๋ก ๋ฐ๊พผ๋ค.
- p[x]๋ฅผ x๋ก ํด์ ๊ณ์ ํ๋ค.
- ๋ง์ฝ, case 1์ ๊ฑฐ์น๊ณ case 2๋ก ์๋ค๋ฉด, p[x]๋ red์๊ธฐ๋๋ฌธ์ ์ข
๋ฃ๋๋ค. ( => s์ ์์๋ค์ด ๋ชจ๋ black์ธ ์ฑ๋ก ์๊ธฐ ๋๋ฌธ์ black-height๋ ์ ์ง)
๐ด case 3 : s๋ BLACK, s์ ์ผ์ชฝ ์์์ด RED, ์ค๋ฅธ์ชฝ ์์์ด BLACK ์ธ ๊ฒฝ์ฐ
๐ธ x๊ฐ ๋ถ๋ชจ๋
ธ๋ p[x]์ ์ผ์ชฝ ์์์ผ๋
- s๋ฅผ RED, s์ ์ผ์ชฝ ์์์ BLACK์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- s๋ฅผ ์ค์ฌ์ผ๋ก right-Rotate ์์ผ์ค๋ค.
- x์ ์๋ก์ด ํ์ ๋
ธ๋๋ฅผ ๋ฌ์์ค๋ค. ( s = p[x]->right)
๐ธ x๊ฐ ๋ถ๋ชจ๋
ธ๋ p[x]์ ์ค๋ฅธ์ชฝ ์์์ผ๋
- s๋ฅผ RED, s์ ์ผ์ชฝ ์์์ BLACK์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- s๋ฅผ ์ค์ฌ์ผ๋ก left-Rotate ์์ผ์ค๋ค.
- x์ ์๋ก์ด ํ์ ๋
ธ๋๋ฅผ ๋ฌ์์ค๋ค. ( s = p[x]->left)
case 3์ ๊ฒฝ์ฐ๋ ์์ ๊ณผ์ ์ ๋๋ด๊ณ case 4๋ฅผ ์ด์ด์ ์ํํ๋ค.
๐ด case 4 : s๋ BLACK, s์ ์ค๋ฅธ์ชฝ ์์์ด RED์ธ ๊ฒฝ์ฐ
๐ธ x๊ฐ ๋ถ๋ชจ๋
ธ๋ p[x]์ ์ผ์ชฝ ์์์ผ๋
- s์ ์์ p[x]์ ์์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- p[x]์ ์์ BLACK, s์ ์ค๋ฅธ์ชฝ ์์์ BLACK์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- p[x]์ ๋ํด์ left-rotate๋ฅผ ์์ผ์ค๋ค.
- x์ double-black์ ์ ๊ฑฐํ๊ณ ์ข
๋ฃํ๋ค.
๐ธ x๊ฐ ๋ถ๋ชจ๋
ธ๋ p[x]์ ์ค๋ฅธ์ชฝ ์์์ผ๋
- s์ ์์ p[x]์ ์์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- p[x]์ ์์ BLACK, s์ ์ผ์ชฝ ์์์ BLACK์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- p[x]์ ๋ํด์ right-rotate๋ฅผ ์์ผ์ค๋ค.
- x์ double-black์ ์ ๊ฑฐํ๊ณ ์ข
๋ฃํ๋ค.
x๊ฐ root์ด๊ฑฐ๋ double black์ด ๊นจ์ง๋๊น์ง ๋ฐ๋ณตํด์ค ํ, x๋ฅผ black์ผ๋ก ๋ฐ๊ฟ์ค๋ค.