ํธ๋ฆฌ
์๋ฃ๊ตฌ์กฐ์์ ํธ๋ฆฌ ๋ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ง๋ค.
- ํธ๋ฆฌ๋ ํ๋์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ค.
- ํธ๋ฆฌ๋ 0๊ฐ ์ด์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ๊ณ ์๋ค.
- ๊ทธ ์์๋ ธ๋ ๋ํ 0๊ฐ ์ด์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ ์ํ๋ค.
ํธ๋ฆฌ๋ ๋น ์ํ ๊ทธ๋ํ์ ํ ์ข ๋ฅ ์ด๋ค.
ํธ๋ฆฌ์ ์ข ๋ฅ
ํฌํ ์ด์ง ํธ๋ฆฌ (Full Binary Tree)
ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋์ ๊น์ด๊ฐ ๊ฐ์ ์์ ํ ์ด์ง ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
์์ ์ด์ง ํธ๋ฆฌ (Complete Binary Tree)
๋ ธ๋์ ๋ง์ง๋ง ๋ถ๋ถ (๋ ๋ถ๋ถ) ์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ์์ ๋ ธ๋๋ฅผ 2๊ฐ๋ฅผ ๊ฐ์ง ์ด์ง ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
์ด์ง ํธ๋ฆฌ (Binary Tree)
ํธ๋ฆฌ์ค์์๋ ๊ฐ ๋ ธ๋์ ์์๋ ธ๋๊ฐ ์ต๋ 2๊ฐ ๋ฅผ ๊ฐ๊ณ ์๋ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
ํธ๋ฆฌ์ ์ํ (ํ์)
ํธ๋ฆฌ์ ์ํ ๋ฐฉ์์ ๋ํ์ ์ผ๋ก ๋ค์ 4๊ฐ์ง (์ ์, ์ค์, ํ์, ๋ ๋ฒจ) ๋ก ๋๋๋ค.
์ ์ ์ํ (Pre-order traversal)
- ๋ฃจํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ์ผ์ชฝ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ์ค๋ฅธ์ชฝ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
๋ฃจํธ ๋ ธ๋๊ฐ ๋งจ ์ฒ์ ๋์จ๋ค.
static void preOrder(Node n) {
if (n != null) {
System.out.println(n.getData() + " ");
preOrder(n.getLeft());
preOrder(n.getRight());
}
}
์ค์ ์ํ (In-order traversal)
- ์ผ์ชฝ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ๋ฃจํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ์ค๋ฅธ์ชฝ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
static void inOrder(Node n) {
if (n != null) {
inOrder(n.getLeft());
System.out.println(n.getData() + " ");
inOrder(n.getRight());
}
}
ํ์ ์ํ (Post-order traversal)
- ์ผ์ชฝ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ์ค๋ฅธ์ชฝ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
- ๋ฃจํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
static void postOrder(Node n) {
if (n != null) {
postOrder(n.getLeft());
postOrder(n.getRight());
System.out.println(n.getData() + " ");
}
}
๋ ๋ฒจ ์ํ (Level-order traversal)
ํ ๋ ๋ฒจ์ ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๋ค์ ๋ ๋ฒจ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ผ๋ก
๋ ๋ฒจ์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐฉ๋ฌธํ๋ค.
- ๋ฐฉ๋ฌธ์์ : E > B > G > A > D > F > H > C