ํธ๋ฆฌ๋?
- ๊ทธ๋ํ์ ํ ์ข ๋ฅ์ด๋ค.
- ํธ๋ฆฌ๋ ๋ ธ๋๋ก ์ด๋ฃจ์ด์ง ์๋ฃ ๊ตฌ์กฐ์ด๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
- ํธ๋ฆฌ๋ ํ๋์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ฐ๋๋ค.
- ๋ฃจํธ ๋ ธ๋๋ 0๊ฐ ์ด์์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๊ทธ ์์๋ค๋ ๋ชจ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
- ๋ ธ๋๋ค๊ณผ ๋ ธ๋๋ค์ ์ฐ๊ฒฐํ๋ ์ฃ์ง๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ์ด ์ฐ๊ฒฐ๋ ์ฃ์ง๋ค์ ์ ๋๋ก ์ฌ์ดํด์ด ์กด์ฌํ์ง ์๋๋ค.
- ์ฌ์ดํด์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์๋ ๋ฌด์กฐ๊ฑด ๋ ธ๋์ ์ - 1 ์ ๋ง์กฑํ๋ค.
- ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ค์ ๋จ ํ๋์ ๋ถ๋ชจ๋ ธ๋๋ฅผ ๊ฐ์ง๋ค.
- ๋ฃจํธ์์ ์ด๋ค ๋ ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ Uniqueํ๋ค.
ํธ๋ฆฌ์ ๊ด๋ จ๋ ์ฉ์ด
- depth : ๋ฃจํธ์์ ์ด๋ค ๋ ธ๋์ ๋๋ฌํ๊ธฐ ์ํด ๊ฑฐ์ณ์ผ ํ๋ ์ฃ์ง์ ์๋ฅผ ๋งํ๋ค.
- height : ๋ฃจํธ๋ ธ๋์์ ์์๋ ธ๋์ ์ด๋ฅด๋ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก์ ์ฃ์ง ์๋ฅผ ์๋ฏธํ๋ค.
- Level : ์ด๋ ํน์ ๋์ด๋ฅผ ๊ฐ์ง๋ ๋ ธ๋๋ค์ ์งํฉ์ Level์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- Leaf node : ์ฌ๊ธฐ์ Leaf node๋ ์์๋ ธ๋๊ฐ ์๋ ์ตํ๋จ์ ๋ ธ๋๋ค์ ์๋ฏธํ๋ค.
- internal node : Leaf node๊ฐ ์๋ ๋ ธ๋๋ค์ ๋งํ๋ค.
- degree : ๊ฐ ๋ ธ๋๊ฐ ์ง๋ ๊ฐ์ง์ ์๋ฅผ ๋งํ๋ค.
- degree of tree : ํธ๋ฆฌ์ ์ต๋ ์ฐจ์๋ฅผ ๋งํ๋ค.
์ด์งํธ๋ฆฌ๋?
์์๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ธ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
์ด์งํธ๋ฆฌ๋ full binary tree, complete binary tree, perfect binary tree ๋ฑ์ด ์๋ค.
full binary tree
๋ชจ๋ ๋ ธ๋๊ฐ 0๊ฐ ๋๋ 2๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ํธ๋ฆฌ
complete binary tree
๋ง์ง๋ง Level์ ์ ์ธํ ๋ชจ๋ Level์ ์์นํ ๋ ธ๋๋ค์ด ๊ฝ ์ฑ์์ง ์ด์งํธ๋ฆฌ์ด๋ค.
๋ฌด์กฐ๊ฑด ๋ฐ์ดํฐ๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฑ์์ ธ์ผ ํ๋ค.
Perfect binary tree
full binary tree์ด๋ฉด์ ์์ ์ด์ง ํธ๋ฆฌ์ธ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ์ฆ, ๋ชจ๋ ๋ ธ๋๋ค์ด ๋๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ฉฐ ๋ชจ๋ Leaf Node๊ฐ ๋์ผํ Level์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ๊ฐ ๋์ด h๋ง๋ค ๋ ธ๋์ ๊ฐ์๊ฐ ์ ํํ 2^(h-1) ์ด์ฌ์ผ ํ๋ค.
๊ทธ๋ํ vs ํธ๋ฆฌ
- ํธ๋ฆฌ๋ ๊ทธ๋ํ์ ํ ์ข ๋ฅ์ด๊ธฐ๋ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ผ๋ฐ์ ์ธ ๊ทธ๋ํ์ ์ฐจ์ด์ ์ด ๋ฌด์์ผ๊น?
- ์ฐ์ ํธ๋ฆฌ๋ ๊ทธ๋ํ์ ๋ค๋ฅด๊ฒ ๋ฌด๋ฐฉํฅ์ธ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ์ง ์๋ค. ๋ค์์ผ๋ก ๊ฐ์ฅ ์ค์ํ ์ฐจ์ด์ ์ ํธ๋ฆฌ๋ ์ฌ์ดํด์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์์ฒด ๊ฐ์ ๋ ๋ถ๊ฐ๋ฅํ๊ณ ์ด๋ฅผ ์ ๋ฆฌํ์๋ฉด ๋น์ํ ๊ทธ๋ํ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
- ๊ทธ๋ํ๋ ๋ฃจํธ ๋ ธ๋๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ์ง ์์ง๋ง, ํธ๋ฆฌ๋ ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ผญ ๊ฐ์ง๊ณ ์์ด์ผ๋ง ํ๋ค.
- ํธ๋ฆฌ๋ ๊ทธ๋ํ์ ๋ค๋ฅด๊ฒ ๋ถ๋ชจ-์์ ๊ฐ๋ ๋ ์กด์ฌํ๋ค.
ํธ๋ฆฌ ์ํ
ํธ๋ฆฌ์ํ๋ ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํน์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ๊ณผ์ ์ ๋งํ๋ค. ํธ๋ฆฌ ์ํ์๋ ๋ถ๋ชจ, ์์๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํ๋ ์์์ ๋ฐ๋ผ ์ ์์ํ, ์ค์์ํ, ํ์์ํ 3๊ฐ์ง๋ก ๋ถ๋ฅ๋๋ค.
preorder (์ ์์ํ)
๋ ธ๋ -> ์ผ์ชฝ ์๋ธํธ๋ฆฌ -> ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์
void preorder(TreeNode currentNode) {
if(currentNode != null) {
System.out.print(currentNode.data);
inorder(currentNode.left);
inorder(currentNode.right);
}
}
inorder (์ค์์ํ)
์ผ์ชฝ ์๋ธํธ๋ฆฌ -> ๋ ธ๋ -> ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์
void inorder(TreeNode currentNode) {
if(currentNode != null) {
inorder(currentNode.left);
System.out.print(currentNode.data);
inorder(currentNode.right);
}
}
postorder (ํ์์ํ)
์ผ์ชฝ ์๋ธํธ๋ฆฌ -> ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ -> ๋ ธ๋ ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์
void postorder(TreeNode currentNode) {
if(currentNode != null) {
inorder(currentNode.left);
inorder(currentNode.right);
System.out.print(currentNode.data);
}
}
https://ratsgo.github.io/data%20structure&algorithm/2017/10/21/tree/
https://gmlwjd9405.github.io/2018/08/12/data-structure-tree.html