# ํธ๋ฆฌ(Tree)
written by sohyeon, hyemin ๐ก
# 1. ํธ๋ฆฌ๋?
ํธ๋ฆฌ(tree)
๋ ๊ทธ๋ํ์ ํ ์ข
๋ฅ๋ก, ๋ฐ์ดํฐ ์ฌ์ด์ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค.
# 2. ํธ๋ฆฌ์ ํน์ง
๊ทธ๋ํ์ ํ ์ข ๋ฅ๋ก,
์ต์ ์ฐ๊ฒฐ ํธ๋ฆฌ
๋ผ๊ณ ํ๋ค.ํธ๋ฆฌ๋
๊ณ์ธต ๋ชจ๋ธ
์ด๋ค.ํธ๋ฆฌ๋
DAG(Directed Acyclic Graphs, ๋ฐฉํฅ์ฑ์ด ์๋ ๋น์ํ ๊ทธ๋ํ)
์ ํ ์ข ๋ฅ๋ก,์ฌ์ดํด์ด ์๋ค.
๋ ธ๋๊ฐ N๊ฐ์ธ ํธ๋ฆฌ๋ ํญ์
N-1๊ฐ์ ๊ฐ์ (๊ฐ์ง, edge)
์ ๊ฐ์ง๋ค.ํ ๊ฐ์ ๋ฃจํธ ๋ ธ๋
๋ง์ด ์กด์ฌํ๋ฉฐ, ๋ชจ๋ ์์ ๋ ธ๋๋ ํ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ง์ ๊ฐ์ง๋ค.๋ถ๋ชจ - ์์ ๊ด๊ณ
์ด๋ฏ๋ก ํ๋ฆ์ top-bottom ์ด๋ bottom-top์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.์ํ๋
Pre-order(์ ์), In-order(์ค์) ์๋๋ฉด Post-order(ํ์)
๋ก ์ด๋ฃจ์ด์ง๋ค.ํธ๋ฆฌ์ ์ข ๋ฅ์๋
์ด์ง ํธ๋ฆฌ, ์ด์ง ํ์ ํธ๋ฆฌ, ๊ท ํ ํธ๋ฆฌ(AVL ํธ๋ฆฌ, red-black ํธ๋ฆฌ), ์ด์ง ํ(์ต๋ํ, ์ต์ํ)
๋ฑ์ด ์๋ค.
# 3. ํธ๋ฆฌ ๊ด๋ จ ์ฉ์ด
ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ ๋
ธ๋(node)
์ ๊ฐ์ (๊ฐ์ง, edge)
์ด๋ค.
๋ฃจํธ ๋ ธ๋(root node)
ํธ๋ฆฌ์ ๊ฐ์ฅ ์๋ถ๋ถ์ ์์นํ๋ ๋ ธ๋๋ก, 0๊ฐ ์ด์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.๋จ๋ง ๋ ธ๋(leaf node)
ํธ๋ฆฌ์ ๊ฐ์ฅ ์๋ซ๋ถ๋ถ์ ์์นํ๋ ๋ ธ๋๋ก, ๋ ์ด์ ๋ป์ด๋๊ฐ ์ ์๋ ๋ง์ง๋ง์ ์์นํ ๋ ธ๋๋ฅผ ๋งํ๋ค.๋ด๋ถ(internal) ๋ ธ๋
๋ฃจํธ๋ฅผ ํฌํจํ์ฌ ๋ฆฌํ๋ฅผ ์ ์ธํ ๋ ธ๋๋ก, ๋ค๋ฅธ ์ฉ์ด๋ก ๋์ด ์๋ ๋ ธ๋(non-terminal node)๋ผ๊ณ ํ๋ค.์์ ๋ ธ๋(child node)
์ด๋ค ๋ ธ๋๋ก๋ถํฐ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์๋์ชฝ ๋ ธ๋๋ก, ๋ ธ๋๋ ์์์ ์ฌ๋ฌ ๊ฐ ๊ฐ์ง ์ ์๋ค. ์๋ฅผ ๋ค์ด X๋ 1๊ฐ, Y๋ 2๊ฐ์ ์์์ ๊ฐ์ง๊ณ ์๋ค.๋ถ๋ชจ ๋ ธ๋(Parent Node)
์ด๋ค ๋ ธ๋์์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์์ชฝ ๋ ธ๋๋ก, ๋ ธ๋๋ 1๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง๋ค. ์๋ฅผ ๋ค์ด Y์ ๋ถ๋ชจ๋ X์ด๋ค.ํ์ ๋ ธ๋(Sibling Node)
๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง๋ ๋ ธ๋๋ฅผ ๋งํ๋ค.์กฐ์
์ด๋ค ๋ ธ๋์์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์์ชฝ ๋ ธ๋ ๋ชจ๋๋ฅผ ๋งํ๋ค.์์
์ด๋ค ๋ ธ๋์์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์๋์ชฝ ๋ ธ๋ ๋ชจ๋๋ฅผ ๋งํ๋ค.๋ ธ๋์ ๋ ๋ฒจ(level)
๋ฃจํธ๋ก๋ถํฐ ์ผ๋ง๋ ๋จ์ด์ ธ ์๋์ง์ ๋ํ ๊ฐ์ ๋งํ๋ค. ๋ฃจํธ์ ๋ ๋ฒจ์ 0์ด๊ณ ๋ฃจํธ๋ก๋ถํฐ ๊ฐ์ ์ด ํ๋์ฉ ์๋๋ก ๋ป์ด๋๊ฐ ๋๋ง๋ค ๋ ๋ฒจ์ด 1์ฉ ๋์ด๋๋ค.๋ ธ๋์ ํฌ๊ธฐ(size)
์์ ์ ํฌํจํ ๋ชจ๋ ์์ ๋ ธ๋์ ๊ฐ์๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค์ด X์ ํฌ๊ธฐ๋ 4์ด๋ค.๋ ธ๋์ ๊น์ด(depth)
๋ฃจํธ์์ ์ด๋ค ๋ ธ๋์ ๋๋ฌํ๊ธฐ ์ํด ๊ฑฐ์ณ์ผ ํ๋ ๊ฐ์ ์ ์๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค์ด Y์ ๊น์ด๋ 2์ด๋ค.ํธ๋ฆฌ์ ์ฐจ์(degree of tree)
๋ ธ๋๊ฐ ๊ฐ๋ ์์์ ์๋ฅผ ๋งํ๋ค. ๋ํ, ๋ชจ๋ ๋ ธ๋์ ์ฐจ์๊ฐ n ์ดํ์ธ ํธ๋ฆฌ๋ฅผ n์ง ํธ๋ฆฌ๋ผ๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด ๊ทธ๋ฆผ์ ๋ชจ๋ ๋ ธ๋์ ์์์ด 3๊ฐ ์ดํ์ด๋ฏ๋ก 3์ง ํธ๋ฆฌ์ด๋ค.ํธ๋ฆฌ์ ๋์ด(height)
๋ฃจํธ๋ก๋ถํฐ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ง ๋ฆฌํ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋งํ๋ค.์๋ธ ํธ๋ฆฌ
ํธ๋ฆฌ ์์์ ๋ค์ ์ด๋ค ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ์ ํ๊ณ ๊ทธ ์์์ผ๋ก ์ด๋ฃจ์ด์ง ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.๋ ํธ๋ฆฌ
๋ ธ๋, ๊ฐ์ ์ด ์๋ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.์์ ํธ๋ฆฌ์ ๋ฌด์์ ํธ๋ฆฌ
ํ์ ๋ ธ๋์ ์์๋ฅผ ๋ฐ์ง๋ฉด ์์ ํธ๋ฆฌ(ordered tree), ๋ฐ์ง์ง ์์ผ๋ฉด ๋ฌด์์ ํธ๋ฆฌ(unordered tree)๋ผ๊ณ ํ๋ค.
# Reference & Additional Resources
https://gmlwjd9405.github.io/2018/08/12/data-structure-tree.html/
โ ์คํ (Stack) ์๊ณ ๋ฆฌ์ฆ์ด๋? โ