โ 1. ํธ๋ฆฌ์ ๊ฐ๋
(1) ํธ๋ฆฌ์ ์ ์

- ํธ๋ฆฌ๋ ๊ณ๊ธ์ ์ธ ํน์ฑ์ ๊ฐ์ง๋ ๊ณ์ธตํ๋ฅผ ํตํด ๊ฒ์์ ํธ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ณผ ์ ์์.
โ 2. ํธ๋ฆฌ์ ํํ ๋ฐฉ๋ฒ
(1) ํธ๋ฆฌ์ ๊ตฌ์ฑ

- ๋ ธ๋: ํธ๋ฆฌ์ ํญ๋ชฉ/ํธ๋ฆฌ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ๋ฌถ์์ด๋ค. ์ฝ๊ฒ๋งํด, ์ ์ด๋ฏธ์ง์์ A, B, C... ๊ฐ๊ฐ์ ์๋ฏธ ํ ์ ์์.
- ๋ถ๋ชจ๋ ธ๋: ์ํ ๊ณ์ธต๊ตฌ์กฐ ๋ฐ ์ง์ ์ฐ๊ฒฐ ๋ ๋ ธ๋ ๊ตฌ์กฐ์์ ํด๋น ๋ ธ๋์ ์์๊ณ์ธต์ ๋ถ๋ชจ ๋ ธ๋๋ผ๊ณ ํจ.
- ์์๋ ธ๋: ๋ถ๋ชจ๋ ธ๋์ ๋ฐ๋๋ก ํน์ ๋ ธ๋์ ํ์๊ณ์ธต์ ์์๋ ธ๋๋ผ๊ณ ํจ.
- ( ํน์ง์ ๋ถ๋ชจ๋ ธ๋์ ์์๋ ธ๋๋ ์ง์ ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ์์๋ง ๊ฐ๋ฅํ๋ฏ๋ก ๋ถ๋ชจ๋ ๋ฐ๋์ ๋ ธ๋ 1๊ฐ๊ฐ ๋ ์ ์์. )
- ๋ฃจํธ๋ ธ๋: ํธ๋ฆฌ์ ์ต์ํ ๋ ธ๋๋ก ๋ถ๋ชจ๊ฐ ์๋ ๋ ธ๋๋ก ๋ณผ ์ ์๋ค.
- ์๋ธํธ๋ฆฌ: ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด ์๊ธฐ๋ ํธ๋ฆฌ๋ค์ ์๋ฏธํ๋ค. ์ฝ๊ฒ๋งํด, B์ ์๋ธํธ๋ฆฌ๋ D, H, I or E ๊ฐ ๋ ์ ์์.
- ( ๋ํ, B์ ์๋ธํธ๋ฆฌ๋ผ๊ณ ํ๋ฉด B๊ฐ ๋ฃจํธ๊ฐ ๋๋ฉด์ B๋ฅผ ํฌํจํ B or D, H, I or E ๊ฐ ์๋ธํธ๋ฆฌ์ ํฌํจ๋ ๋ ธ๋๋ก ๋ด )
- ์ ๋ ธ๋: ํธ๋ฆฌ์ ๋งจ ๋์ ์์ผ๋ฉด์, ์์ ์ ์๋ธํธ๋ฆฌ๋ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์๋ ๋ ธ๋๋ฅผ ์๋ฏธํจ.
(2) ์ง์ ๋ฐ ์ง์ถ ์ฐจ์

- ์ฐจ์: ํ๋์ ๋ ธ๋์์ ์ฐ๊ฒฐ ๋์ด ์๋ ์ ์ ๊ฐ์๋ก ๋ณผ ์ ์์. ( ์ฆ, A ์ ์ฐจ์๋ 2๊ฐ๋ก ๋ณผ ์ ์์. )
- ์ง์ ์ฐจ์: ํน์ ๋ ธ๋์ ์ ๊ทผํ๋ ์ฐจ์๋ฅผ ์ง์ ์ฐจ์๋ผ๊ณ ํจ.
- ์ง์ถ์ฐจ์: ํน์ ๋ ธ๋์์ ๋ค๋ฅธ ๋ ธ๋์ ์ ๊ทผํ๋ ์ฐจ์๋ฅผ ์ง์ถ์ฐจ์๋ผ๊ณ ํจ.
- ์ฆ, ๋ฃจํธ ๋ ธ๋๋ ํญ์ ์ง์ ์ฐจ์๊ฐ 0 ์ผ ์ ์์.
- ๋ํ, ๋ฃจํธ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋์ ์ง์ ์ฐจ์๋ 1, ์ ๋ ธ๋์ ์ง์ถ ์ฐจ์๋ ํญ์ 0 ์ด ๋ ์ ์์.
(3) ๋ด๋ถ ๋ ธ๋ ๋ฐ ํ์ ๋ ธ๋
- ๋ด๋ถ ๋ ธ๋: ๋ฃจํธ ๋ ธ๋, ์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋๋ฅผ ๋ชจ๋ ๋ด๋ถ ๋ ธ๋๋ก ๋ณผ ์ ์์.
- ํ์ ๋ ธ๋: ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ๋ ๋ ธ๋๋ค์ ์๋ฏธํจ. ์ฆ, ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง๊ธฐ์ ๊ฐ์ ๋ ๋ฒจ์ ๋ ธ๋๋ก๋ ๋ณผ ์ ์์.
(4) ํธ๋ฆฌ์ ๋ ๋ฒจ

- ๋ ธ๋์ ๋ ๋ฒจ: ๋ฃจํธ๋ก๋ถํฐ ๊ทธ ๋ ธ๋๊น์ง ์ด์ด์ง ์ (๊ฒฝ๋ก)์ ๊ธธ์ด๋ฅผ ์๋ฏธํจ.
- ( ๋ฃจํธ ๋ ธ๋์ ๋ ๋ฒจ์ 1 ๋๋ 0 ์ผ๋ก ์ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ฌ๊ธฐ์๋ 0๋ ๋ฒจ๋ก ๋ด )
- ํธ๋ฆฌ์ ๊น์ด: ํธ๋ฆฌ์ ์ต๋ ๋ ๋ฒจ์ 1์ ๋ํ๋ฉด ํธ๋ฆฌ์ ๊น์ด๋ฅผ ์ ์ ์์. ( ์ฆ, 3 level + 1 = 4 -> ๊น์ด: 4 )
- ( ๋ฃจํธ๋ก๋ถํฐ ํน์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ(๊ฐ์ ์)๋ฅผ ์๋ฏธํ๋ค. )
- ( ๋ฃจํธ์ ๊น์ด๋ 0์ผ๋ก ๋๋ ๊ฒ ์ผ๋ฐ์ ์ด๋ฉฐ, ๋ฃจํธ์ ์์์ 1, ๋ฃจํธ์ ์์๋ 2๋ก ๋ณผ ์ ์์. )
- ํธ๋ฆฌ์ ๋์ด: ๋ฃจํธ ๋ ธ๋์ ๋์ด, ์ฆ ์ ์ฒด ํธ๋ฆฌ์ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก์ ๊ฐ์ ์๋ฅผ ์๋ฏธํจ.
- ๋ ธ๋์ ๋์ด: ํด๋น ๋ ธ๋์์ ๊ฐ์์ ๋จผ ๋ฆฌํ ๋ ธ๋๊น์ง์ ๊ฐ์ ์
โ 3. ์ถ์ ์๋ฃํ
- ํธ๋ฆฌ ๊ฐ์ฒด์ ์ ์: ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ฐ๋ ์ ํ ๋ฆฌ์คํธ๋ฅผ ํธ๋ฆฌ ๊ฐ์ฒด๋ก ์ ์ํจ.


- ์ด๋ฌํ ์ถ์์๋ฃํ์ ๊ฐ์ง๊ณ ํธ๋ฆฌ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๊ฒ ๋จ.
โ 4. ์ด์ง ํธ๋ฆฌ
(1) ์ด์ง ํธ๋ฆฌ์ ์ ์

- ๋ชจ๋ ๋ ธ๋์ ์ฐจ์๊ฐ 2 ์ดํ์ธ ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค. ์ฆ, ๋ ธ๋์ ์ฐจ์๊ฐ 2๊ฐ๋ฅผ ๋์ด๊ฐ๋ฉด ์ด์ง ํธ๋ฆฌ๋ก ์๋ด.
- - ์ด์ง ํธ๋ฆฌ๋ ์ํ์ ์ผ๋ก ์ด์ง ํธ๋ฆฌ์ ๊ตฌ์ฑ์ ๊ดํ ์ด๋ก ์ ์ ๋ฆฌํ๊ธฐ ์ฌ์. ( 2์ n ์น ์ด๋ฐ๊ฑฐ ํํ์ด ์ฌ์ )
- - ์ฆ, ์ด์ง ํธ๋ฆฌ๋ 2์ n ์น์ผ๋ก ๊ฐ์๊ฐ ๋์ด๋๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ ๋ด๋ถ์์ ๊ตฌํํ๊ธฐ๋ ์ฝ๊ณ ํจ์จ์ ์.
- ๋ชจ๋ ๋ ธ๋๊ฐ 2๊ฐ ์ดํ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ์ผ๋ฐ์ฑ์ ๊ฐ์ง๊ณ ์์.
- - ์ฆ, ์ค๋ฅธ์ชฝ, ์ผ์ชฝ ์ด๋ผ๋ ๋ฐฉํฅ ๊ฐ๋ ์ ๋ถ์ฌํ ์๋ ์์.
- ์ค๋ฅธ์ชฝ ๋ ธ๋์ ์ผ์ชฝ ๋ ธ๋์ ๊ฐ๋ ์ ์ ๊ทผ(์๋ฏธ์ ๊ด๊ณ)๋ ์์ ( ์ด์ง ํ์ ํธ๋ฆฌ์์ ํ์ ๊ฐ๊ฒ ๋๋ค? )
(2) ๊ฐ๋ ์ฐฌ ์ด์ง ํธ๋ฆฌ ( ํฌํ ์ด์ง ํธ๋ฆฌ )

- ๋๋ฒ์งธ์ ํด๋นํ๋ฉฐ, ์ด์ง ํธ๋ฆฌ์ ๊ฐ ๋ ๋ฒจ์์ ํ์ฉ๋๋ ์ต๋ ๊ฐ์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ํธ๋ฆฌ๋ฅผ ์๋ฏธํจ.
- ์ ๋ ธ๋๊ฐ ์ฑ์์ง๋งํผ ๋ค ์ฑ์์ง ํธ๋ฆฌ๋ก ๋ณผ ์ ์์. ( ์ต๋ ๋ ๋ฒจ ๊น์ง ๋ ธ๋๊ฐ ๋ค ์ฑ์์ ธ ์์ด์ผ ํจ. )
(3) ์์ ์ด์ง ํธ๋ฆฌ

- ๋์ด๊ฐ k์ธ ์ด์งํธ๋ฆฌ๊ฐ 0 ๋ ๋ฒจ ๋ถํฐ k-2 ๋ ๋ฒจ ๊น์ง ๋ค ์ฑ์ฐ๊ณ , ๋ง์ง๋ง k-1 ๋ ๋ฒจ์์ ์ผ์ชฝ๋ถํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ ธ๋๋ค์ด ์ฐจ๋ก๋ก ์ฑ์์ง ์ด์ง ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
- ์ฝ๊ฒ๋งํด, ์ต๋ ๋ ๋ฒจ ๋ฐ๋ก์ ์ ๋ ๋ฒจ์ ๋ ธ๋๋ค์ด ๋ค ์ฑ์์ ธ ์์ด์ผ ํจ.
- ๋ํ, ์ต๋ ๋ ๋ฒจ์ ๋ ธ๋๊ฐ ์ผ์ชฝ๋ถํฐ ์ฐจ๋ก๋ก ์ฑ์์ง๋ ๊ฒฝ์ฐ๊ฐ ๋์ด์ผ ํจ.
- ์ฆ, ์ต๋ ๋ ๋ฒจ์ ๋ ธ๋๊ฐ 1๊ฐ๋ง ์กด์ฌํด๋ ๊ทธ๊ฑด ์์ ์ด์ง ํธ๋ฆฌ๋ก ๋ณผ ์ ์์.
- ํฌํ ์ด์ง ํธ๋ฆฌ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ์ด์ง ํธ๋ฆฌ๋ก๋ ๋ณผ ์ ์์.
(4) ๋ฐฐ์ด์ ์ด์ฉํ ์ด์ง ํธ๋ฆฌ์ ๊ตฌํ


- ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ ์ผ๋ก ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ(ํฌ์ธํฐ) ๋ฐฉ์์ด ์์.
- ํธ๋ฆฌ๊ฐ ์์ ์ด์ง ํธ๋ฆฌ ๋๋ ๊ฐ๋ ์ฐฌ ์ด์ง ํธ๋ฆฌ์ธ ๊ฒฝ์ฐ ๋ญ๋น๋๋ ๊ณต๊ฐ์ด ์์ด์ ๋ฐฐ์ด์ ์ด์ฉํ๋ฉด ํจ์จ์ ์.

- ํ์ง๋ง, ์์ ์ด์ง ํธ๋ฆฌ ๋๋ ๊ฐ๋ ์ฐฌ ์ด์ง ํธ๋ฆฌ๊ฐ ์๋ ์ด์ง ํธ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ์์ ๊ฐ์ ๋ชจ์์ด ๋ ์ ์์.
- ์ด์ํ๋ก ๋ฐฐ์ด๋ก ๊ตฌํ์ ํ๊ฒ ๋๋ฉด, ํธ๋ฆฌ๊ฐ ๊น์ด์ง์๋ก ๊ธฐ์ต์ฅ์ ๋ญ๋น๊ฐ 2์ ๊ฑฐ๋ญ์ ๊ณฑ์ ๋น๋กํ๋ฉฐ ๋ญ๋น๊ฐ ์ฌํด์ง๊ฒ ๋จ.
- ์ฆ, ์์ ๊ฐ์ ์ด์ง ํธ๋ฆฌ ๋๋ ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ์์ ๋ฐฐ์ด๋ก ๊ตฌํ์ ํ๊ฒ ๋๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํด์ง ์ ์์.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ํธ๋ฆฌ๋ ์ด์ง ํธ๋ฆฌ์์๋ ๋ฐฐ์ด์ ํตํด ๊ตฌํํ๋ ๋ฐฉ์์ ๊ถ์ฅํ์ง ์์.
(5) ํฌ์ธํฐ๋ฅผ ์ด์ฉํ ์ด์ง ํธ๋ฆฌ์ ๊ตฌํ


- ๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ ํธ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํด์ง์ง ์์. ( ๋จ์ํ ๋ ธ๋๋ฅผ ๋ง๋ค์ด์ ์ฐ๊ฒฐ์ ํ๋ฉด ๋จ. )
- ๋ํ, ๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ ์ฝ์ ๊ณผ ์ญ์ ์ ์ฐ์ฐ์ด ๊ฐ๋จํด์ง.

- ์์ ๊ฐ์ ์ฐ์ฐ์ ํตํด์ ์ด์ง ํธ๋ฆฌ์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(ํฌ์ธํฐ) ๋ฅผ ํ์ฉํ์ฌ ์์ฑ ํ ์ ์์.
- ํด๋น J ๋ ธ๋๋ ๋ฃจํธ ๋ ธ๋๋ก ๋ณผ ์ ์๊ณ , ๊ตฌ๋ถ์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ตฌ๋ถ์ ํ ์ ์์.
โ 5. ์ด์ง ํธ๋ฆฌ ์ฐ์ฐ
(1) ์ด์ง ํธ๋ฆฌ์ ์ํ

- ์ด์ง ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ฅผ(๋น ์ง์์ด ๊ทธ๋ฆฌ๊ณ ์ค๋ณต์์ด) ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ ํ์๋ฅผ ์๋ฏธํจ.
(2) ์ด์ง ํธ๋ฆฌ์ ์ํ - ์ ์ ์ํ


- ์ ์ ์ํ: ๋ฃจํธ๋ ธ๋ -> ์ผ์ชฝ ์์๋ ธ๋(์ผ์ชฝ ์๋ธํธ๋ฆฌ) -> ์ค๋ฅธ์ชฝ ์์๋ ธ๋(์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ)

- ์ผ์ชฝ์ ๋ ธ๋๋ถํฐ ํ ๋ฒ์ฉ๋ง ๋ฐฉ๋ฌธ์ ํ๊ฒ ๋จ.
(3) ์ด์ง ํธ๋ฆฌ์ ์ํ - ํ์ ์ํ

- ํ์ ์ํ: ์ผ์ชฝ ์์๋ ธ๋(์ผ์ชฝ ์๋ธํธ๋ฆฌ) -> ์ค๋ฅธ์ชฝ ์์๋ ธ๋(์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ) -> ๋ฃจํธ๋ ธ๋

(4) ์ด์ง ํธ๋ฆฌ์ ์ํ - ์ํ ๋จ์ ๋ฐ PLR, LPR, LRP


(5) ์ด์ง ํธ๋ฆฌ ์ฐ์ฐ - ์ํ ์๊ณ ๋ฆฌ์ฆ
[ ์ ์ ์ํ PLR ]

void preorder(node* root) {
if (root == NULL) return; // 1๏ธโฃ ์ข
๋ฃ ์กฐ๊ฑด
printf("%c ", root->data); // 2๏ธโฃ ํ์ฌ ๋
ธ๋ ์ถ๋ ฅ
preorder(root->left); // 3๏ธโฃ ์ผ์ชฝ ์๋ธํธ๋ฆฌ ์ฌ๊ท ํธ์ถ
preorder(root->right); // 4๏ธโฃ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์ฌ๊ท ํธ์ถ
}
- ์ฌ๊ทํธ์ถ ๋ฐฉ์์ ํ์ฉํด์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ ์์.
- ์ฒ์ root ์๋ ํธ๋ฆฌ์ ๋ฃจํธ ์ฃผ์๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- ์ดํ, root -> data ๋ฅผ ์ถ๋ ฅํ๊ณ , preorder(root -> left); ๋ฅผ ํตํด ๋ ๋ค์ ์์ ์ ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
- ๊ทธ๋ ๊ฒ ๋๋ฉด, root -> left ์ฆ, ํด๋น ๊ธฐ์กด์ ๋ฃจํธ ์ฃผ์๊ฐ์ ์๋ left ์ฃผ์๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- ๊ทธ๋ผ ํด๋น left์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ๋ค ๋ค์ preorder(root -> left) ๋ฅผ ํธ์ถํ๊ฒ ๋๋๋ฐ, ์ด๋ ๋ง์ฝ ์ ๋ ธ๋๋ผ left๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, left ๋ฅผ ํธ์ถํ๋ ์์ ์์ ์กฐ๊ฑด๋ฌธ์ ํตํด root != NULL ์์ true ๊ฐ ๋์ด, return ์ด ๋๋ค.
- ์ด return ์ด ๋๊ฒ ๋๋ฉด, ๊ธฐ์กด์ ๊ธฐ์กด์ ํธ๋ฆฌ์ ๋ฃจํธ ๋ ธ๋๋ก ์ด๋์ ํ๊ฒ ๋๋ฉด์ preorder(root -> right); ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
- ๊ทธ๋ฌ๋ฉด right ์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋์ด, ๊ทธ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ฒ ๋๋ค.
- ์ฆ, left ๋ ธ๋์ ์ฃผ์๊ฐ์ ๋ฃ์ด์ ๋ณด๋ด๊ธฐ ์ ์ผ๋ก ๋์๊ฐ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด left ๋ ธ๋์ ์ฃผ์๊ฐ์ ๋ฃ๊ธฐ ์ ์ธ ๊ธฐ์กด์ ๋ ธ๋์ฃผ์๋ฅผ ๊ฐ์ง
[ ์ค์ ์ํ LRP ]

- ์ค์ ์ํ ๋ํ, ์ ์ ์ํ์ ๋น์ทํ ๋์ ์๋ฆฌ๋ก ์ฌ๊ทํธ์ถ์ ํ์ฉํจ.
[ ํ์ ์ํ LPR ]

- ํ์ ์ํ ๋ํ, ์ ์ ์ํ์ ๋น์ทํ ๋์ ์๋ฆฌ๋ก ์ฌ๊ทํธ์ถ์ ํ์ฉํจ.
(6) ์ด์ง ํธ๋ฆฌ ์ฐ์ฐ - ์์ฑ, ์ฝ์ , ์ญ์
- ์์ฑ: ์ผ๋ฐ์ ์ธ ์ด์ง ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฐ์ฐ์ ์ฌ์ฉํ๋ฉฐ, ์ฒซ ๋ ธ๋๋ฅผ ์์ฑํ๋ฉด ๋ฃจํธ ๋ ธ๋๊ฐ ๋จ.
- ์ฝ์ : ์๋ก์ด ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ฝ์ ์ฐ์ฐ์ ์ฌ์ฉํ๋ฉฐ ์ฝ์ ์ด ๋๊ฒ ๋จ.
- ์ญ์ : ๋ ธ๋๋ฅผ ์ญ์ ํ ๋, ์ญ์ ํ๋ ค๋ ๋ ธ๋๊ฐ ์ ๋ ธ๋์ธ ๊ฒฝ์ฐ๋ ํด๋น ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ NULL๋ก ์ง์ ํ๋ฉด ๋จ.
- ( ์ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ญ์ ํ๋ ค๋ ๋ ธ๋์ ์์๋ ธ๋์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐ๋ก ํด์ฃผ์ด์ผ ํจ. )
- ( ์ฆ, ์ ๋ ธ๋๊ฐ ์๋ ๋ด๋ถ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ ์ ๋ ธ๋์ ์์น๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง๋๋ก ๋ค๋ฅธ ๋ ธ๋์ ์ฐ๊ฒฐ์ ํด์ค์ผํจ )
[ ๋ ธ๋ ์ฝ์ ์ฝ๋ ]

- node here: ์ฝ์ ํ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋์ left ๋ right ๋ฉค๋ฒ ์ฆ, ์์ ๋ ธ๋์ ํฌ์ธํฐ ๊ฐ์ด ๋ ์ ์์.
- node *it: ์ฝ์ ํ ๋ ธ๋์ ์ฃผ์๊ฐ
- here == NULL: ์์ ๋ ธ๋์ ํฌ์ธํฐ๊ฐ์ด null ์ธ ๊ฒฝ์ฐ์๋ ๊ฒฐ๊ตญ ์ ๋ ธ๋์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ฃผ์๊ฐ์ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋จ.
- else: ํ์ง๋ง, null ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ ๋ ธ๋๊ฐ ์๋ ๋ด๋ถ ๋ ธ๋๋ก ๋ณผ ์ ์์.
- node* victim: ์์ else ์ฆ, here ์ด ๊ฐ๋ฆฌํค๋๊ฒ null ์ด ์๋ ๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํด๋น ์ฃผ์๊ฐ์ ๋ณต์ฌํ๊ธฐ ์ํ ์ฉ๋
- victim = here: ๊ธฐ์กด์ here ์ฃผ์๊ฐ์ victim ์ ๋ฃ์์ผ๋ก์จ, ๋ณต์ฌ๊ฐ ๋ ์ํฉ์.
- *here = *it: here ์ฃผ์๊ฐ์ *it ์ฃผ์๊ฐ์ ๋ฃ์์ผ๋ก์จ ๊ธฐ์กด์ ์ฐธ์กฐํ๋ ์ฃผ์๊ฐ์ ๋ ๋ผ๊ฐ ์ํฉ์.
- return victim: ์ดํ victim ์ ๋ฐ์์ ํ๋ก๊ทธ๋จ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ์กด์ ์ฃผ์๊ฐ์ ์ฐ๊ฒฐํ๊ฒ ๋๋ ๋ก์ง์.
[ ๋ ธ๋ ์ญ์ ์ฝ๋ ]

- node *root: ํธ๋ฆฌ์ ๋ฃจํธ ๋ ธ๋ ์ฃผ์๊ฐ
- node *it: ์ญ์ ํ๋ ค๋ ๋ ธ๋์ ์ฃผ์๊ฐ
- char direction: ์ญ์ ํ ๋ ธ๋๊ฐ ๋ถ๋ชจ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ธ์ง ์ค๋ฅธ์ชฝ ์ธ์ง ์๋ ค์ฃผ๋ ์ฝ๋('l' , 'r')
- node *parent = searchParent(root, it): ์ญ์ ํ๋ ค๋ ๋ ธ๋์ธ it ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ฐฟ๋ ํจ์์ด๋ฉฐ, ๋ฐํ๊ฐ์ ํด๋น it ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ฐพ์์ ์ฃผ์๊ฐ์ ๋ฐํํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก *parent ์ ํด๋น it ๋ถ๋ชจ ๋ ธ๋์ ์ฃผ์๊ฐ์ด ์ฐธ์กฐ๋จ.
- if(parent == NULL): ๋ง์ฝ parent ๊ฐ NULL ์ธ ๊ฒฝ์ฐ ๋ฃจํธ ๋ ธ๋๊ฑฐ๋, ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ๋ก ์ญ์ ๋ถ๊ฐ๋ฅํ๊ฒ ๋จ์ ์๋ฏธํจ.
- if(direction == 'l'): direaction ์ด 'l' ์ด๋ฉด parent ์ left ์ฆ, ์ผ์ชฝ ์์์ NULL ์ ๋ฃ์ด ์ฃผ์์ฐธ์กฐ๋ฅผ ์ง์ ์ฆ, ์ญ์ ์.
- ๊ฒฐ๊ณผ์ ์ผ๋ก 'l' ๊ณผ 'r' ๋ ์ค ํ๋๋ผ๋ ์๋ ๊ฒฝ์ฐ์๋ NULL ์ ๋ฆฌํดํจ.
(7) ์ด์ง ํธ๋ฆฌ ์ฐ์ฐ - ์ด์ง ํธ๋ฆฌ ๋ ธ๋ ๊ฐ์ ์ธ๋ ์ฐ์ฐ

- node *root: ํจ์๋ฅผ ํธ์ถํ๋ฉด์ root ๋ ธ๋ ์ฆ, ํด๋น root ์ ์ฃผ์๊ฐ์ ์ฃผ๊ฒ ๋จ.
- int num = 0: ํด๋น ๋ณ์๋ ๋ ธ๋์ ๊ฐ์๋ฅผ ์ฌ๊ทํธ์ถ ๋ฐฉ์์ผ๋ก ๊ตฌํด์ ์ ์ฅ์ ํด์ฃผ๋ ๋ณ์์.
- if(root == NULL): root ๋ ธ๋๊ฐ NULL ์ธ ๊ฒฝ์ฐ์๋ ๊ฐ์๊ฐ 0์ด๋ฏ๋ก, ๋ฐ๋ก return ์ ํ๊ฒ๋จ.
- else: root ๊ฐ null ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ฌ๋ฌ๊ฐ์ ๋ ธ๋๊ฐ ๋ฃจํธ์ ์กด์ฌ ํ ์ ์์. ( root ๋ ๋ฌด์กฐ๊ฑด ์๋ ๊ฒฝ์ฐ์ )
- num = 1: root ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ์ else ์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก root ๊ฐ ์๋ค๊ณ ๋ณด๋ฉฐ, num ์ 1 ์ฌ๋ ค์ค.
- - ์ดํ, ํด๋น ํจ์๋ฅผ ์ฌ๊ทํธ์ถ ํ๋ฉด์, root ์ left ์ right ๋ฅผ ํ์ธ ํ ๋ค ์์ผ๋ฉด num ์ ๋ํด์ฃผ๋ ์์ผ๋ก ๊ตฌํ๊ฒ ๋จ.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด์งํธ๋ฆฌ์ ๊ฐ์๋ฅผ ์ธ์ ๋ฆฌํด์ ํด์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ณผ ์ ์์.
(7) ์ด์ง ํธ๋ฆฌ ์ฐ์ฐ - ์ด์ง ํธ๋ฆฌ ์ ๋ ธ๋ ๊ฐ์ ์ธ๋ ์ฐ์ฐ

- ์ ๋ ธ๋๋ง ๊ตฌํ๋ ์ฐ์ฐ์, ๋งจ ๋ง์ง๋ง ๋ ธ๋๋ก ๊ฐ์ left ์ right ๊ฐ NULL ์ธ ๊ฒฝ์ฐ์ ์นด์ดํธ๋ฅผ 1 ์ฌ๋ ค์ฃผ๋ฉด ๋๋ค.
โ 6. ์ผ๋ฐ ํธ๋ฆฌ๋ฅผ ์ด์ง ํธ๋ฆฌ๋ก ๋ณํ
- ์ผ๋ฐ ํธ๋ฆฌ๋ฅผ ์ด์ง ํธ๋ฆฌ๋ก ๋ณํํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ทผํ ๋ง์.
(1) ์ด์ง ํธ๋ฆฌ๋ก ๋ณํ ๋ฐฉ๋ฒ

- (1) ์ผ๋ฐ ํธ๋ฆฌ์ ๋ํ์ฌ ๊ฐ ๋ ธ๋์ ํ์ ๋ค์ ์ฐ๊ฒฐ
- (2) ๊ฐ ๋ ธ๋์ ๋ํ์ฌ ๊ฐ์ฅ ์ผ์ชฝ ๋งํฌ๋ง ๋จ๊ธฐ๊ณ ๋ชจ๋ ์ ๊ฑฐ
- (3) ๋ฃจํธ ๋ ธ๋๋ ๋ฐ๋์ ์ผ์ชฝ ์์๋ ธ๋ ํ๋๋ง ๊ฐ๋๋ก ํจ
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ผ๋ฐ ํธ๋ฆฌ๋ฅผ ์ด์ง ํธ๋ฆฌ๋ก ๋ณํ์ด ๋จ.
'๐๋ฐฉ์กํต์ ๋ํ๊ต > ๐ข์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๋ฃ๊ตฌ์กฐ] 6๊ฐ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ฉ (0) | 2025.10.06 |
|---|---|
| [์๋ฃ๊ตฌ์กฐ] 5๊ฐ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2025.09.04 |
| [์๋ฃ๊ตฌ์กฐ] 4๊ฐ - ํ (0) | 2025.09.02 |
| [์๋ฃ๊ตฌ์กฐ] 3๊ฐ - ์คํ (2) | 2025.08.25 |
| [์๋ฃ๊ตฌ์กฐ] 2๊ฐ - ๋ฐฐ์ด (3) | 2025.08.22 |