ํธ๋ฆฌ (Tree)
๋ ธ๋(Node)์ ๊ฐ์ (Edge)๋ก ์ด๋ฃจ์ด์ง ๋น์ ํ ์๋ฃ๊ตฌ์กฐ
ํธ๋ฆฌ์ ์ฉ์ด
๊ตฌ๋ถ | ์ค๋ช |
๊ฐ์ (Edge) | ๋ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ (๋งํฌ) |
๋ ธ๋(Node) | ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์ |
๋ฃจํธ ๋ ธ๋(Root) | ํธ๋ฆฌ์ ์ต ์์ ๋ ธ๋ |
๋ฆฌํ ๋ ธ๋(Leaf) | ์์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋ |
ํ์ ๋ ธ๋(Sibling) | ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ๋ ๋ ธ๋ |
๋ ธ๋์ ํฌ๊ธฐ(Size) | ์์ ์ ํฌํจํ ๋ชจ๋ ์์ ๋ ธ๋์ ๊ฐ์ |
๋ ธ๋์ ๊น์ด(depth) | ๋ฃจํธ์์ ์ด๋ค ๋ ธ๋์ ๋๋ฌํ๊ธฐ ์ํด ๊ฑฐ์ณ์ผ ํ๋ ๊ฐ์ ์ ์ |
๋ ธ๋์ ๋ ๋ฒจ(Level) | ํธ๋ฆฌ์ ํน์ ๊น์ด๋ฅผ ๊ฐ์ง๋ ๋ ธ๋์ ์งํฉ |
๋ ธ๋์ ์ฐจ์(Degree) | ๊ฐ ๋ ธ๋์ ์์ ๋ ธ๋ ๊ฐ์ |
ํธ๋ฆฌ์ ์ฐจ์(Degree of Tree) | ํธ๋ฆฌ์ ์ต๋ ์ฐจ์ |
ํธ๋ฆฌ์ ๋์ด(Height) | ๋ฃจํธ ๋ ธ๋์์ ๊ฐ์ฅ ๊น์์ด ์๋ ๋ ธ๋์ ๊น์ด |
ํธ๋ฆฌ์ ํน์ง
- ๋ถ๋ชจ-์์ ๊ด๊ณ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
- ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ ๋ฐ๋์ ํ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ค.
- ํธ๋ฆฌ ๋ด์ ํน์ ๋ ธ๋์ ๋ค๋ฅธ ํน์ ๋ ธ๋๊น์ง์ ๊ฒฝ๋ก๋ ๋ฐ๋์ ์กด์ฌํ๋ค.
- ๋ ธ๋๊ฐ N๊ฐ์ธ ํธ๋ฆฌ๋ ํญ์ N-1๊ฐ์ ๊ฐ์ ์ ๊ฐ์ง๋ค.
- ์ฌ์ดํด์ด ์กด์ฌํ์ง ์๋๋ค.
์ด์ง ํธ๋ฆฌ(Binary Tree)
์์์ ๋ ธ๋ ์๊ฐ ๋ ๊ฐ ์ดํ์ธ ํธ๋ฆฌ
์ด์ง ํธ๋ฆฌ ์ข ๋ฅ
์ข ๋ฅ | ์ค๋ช |
์ ์ด์ง ํธ๋ฆฌ (Full) | ์์ ๋ ธ๋๊ฐ 0 ๋๋ ๋ ๊ฐ์ธ ์ด์ง ํธ๋ฆฌ |
์์ ์ด์ง ํธ๋ฆฌ (Complete) | - ์ผ์ชฝ๋ถํฐ ์ฑ์์ ธ ์๋ ์ด์ง ํธ๋ฆฌ - ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ๊ณ ๋ชจ๋ ๋ ๋ฒจ์ด ์ฑ์์ ธ ์๋ ํํ - ๋ง์ง๋ง ๋ ๋ฒจ์ ๊ฒฝ์ฐ ์ผ์ชฝ๋ถํฐ ์ฑ์์ ธ ์๋ ํํ |
๋ณ์ง ์ด์ง ํธ๋ฆฌ (Degenerate) | ์์ ๋ ธ๋๊ฐ ํ๋๋ฐ์ ์๋ ์ด์ง ํธ๋ฆฌ |
ํฌํ ์ด์ง ํธ๋ฆฌ (Perfect) | ๋ชจ๋ ๋ ธ๋๊ฐ ๊ฝ ์ฐจ ์๋ ์ด์ง ํธ๋ฆฌ |
๊ท ํ ์ด์ง ํธ๋ฆฌ (Balanced) | - ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๋
ธ๋์ ๋์ด ์ฐจ์ด๊ฐ 1์ดํ์ธ ์ด์ง ํธ๋ฆฌ - map, set์ ๊ตฌ์ฑํ๋ ๋ ๋ ๋ธ๋ ์ด์ง ํธ๋ฆฌ |
์ด์ง ํธ๋ฆฌ ์ํ
์ด์ง ํธ๋ฆฌ์ ์ํ๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ฃผ๋ก ์ฌ๊ท์ ์ผ๋ก ๊ตฌํ๋๋ค. ์ฌ๊ท๋ฅผ ํตํด ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด์ ์ํ๋ฅผ ์ํํ ์ ์๋ค. ๋ํ ์คํ์ด๋ ํ๋ฅผ ์ด์ฉํ์ฌ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ ์๋ ์๋ค.
์ด์ง ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ธ ๊ฐ์ง๊ฐ ์๋ค.
- ์ ์ ์ํ(Pre-Order)
- ์ค์ ์ํ(In-Order)
- ํ์ ์ํ(Post-Order)
์ ์ ์ํ ์์(๊ฐ์ด๋ฐ → ์ผ์ชฝ → ์ค๋ฅธ์ชฝ)
- Root ๋ ธ๋ ๋ฐฉ๋ฌธ
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ ์ ์ ์ํ
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ ์ ์ ์ํ
- F → B → A → D → C → E → G → I → H
์ค์ ์ํ ์์(์ผ์ชฝ → ๊ฐ์ด๋ฐ → ์ค๋ฅธ์ชฝ)
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ ์ค์ ์ํ
- Root ๋ ธ๋ ๋ฐฉ๋ฌธ
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ ์ค์ ์ํ
- A → B → C → D → E → F → G → H → I
ํ์ ์ํ ์์(์ผ์ชฝ → ์ค๋ฅธ์ชฝ → ๊ฐ์ด๋ฐ)
- ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ ํ์ ์ํ
- ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ ํ์ ์ํ
- Root ๋ ธ๋ ๋ฐฉ๋ฌธ
- A → C → E → D → B → H → I → G → F
์ด์ง ํธ๋ฆฌ ์ํ ์ฝ๋ ๊ตฌํ
Node.swift
class Node<T: Comparable> {
var data: T
var left: Node?
var right: Node?
init(data: T) {
self.data = data
}
}
BinaryTree.swift
class BinaryTree<T: Comparable> {
// ์ ์ ์ํ ์์(๊ฐ์ด๋ฐ → ์ผ์ชฝ → ์ค๋ฅธ์ชฝ)
func preOrder(node: Node<T>?) {
guard let node = node else { return }
print(node.data, terminator: " -> ")
self.preOrder(node: node.left)
self.preOrder(node: node.right)
}
// ์ค์ ์ํ ์์(์ผ์ชฝ → ๊ฐ์ด๋ฐ → ์ค๋ฅธ์ชฝ)
func inOrder(node: Node<T>?) {
guard let node = node else { return }
self.inOrder(node: node.left)
print(node.data, terminator: " -> ")
self.inOrder(node: node.right)
}
// ํ์ ์ํ ์์(์ผ์ชฝ → ์ค๋ฅธ์ชฝ → ๊ฐ์ด๋ฐ)
func postOrder(node: Node<T>?) {
guard let node = node else { return }
self.postOrder(node: node.left)
self.postOrder(node: node.right)
print(node.data, terminator: " -> ")
}
}
์คํ ๊ฒฐ๊ณผ