1οΈβ£ μμ μ΄μ§ νΈλ¦¬(Complete Binary Tree).
μμ μ΄μ§ νΈλ¦¬(Complete Binary Tree)λ μ΄μ§ νΈλ¦¬μ ν μ’ λ₯μ λλ€.
1οΈβ£ μμ μ΄μ§ νΈλ¦¬(Complete Binary Tree)μ νΉμ±.
-
λͺ¨λ λ λ²¨μ΄ μμ ν μ±μμ Έ μλ€.
- λ§μ§λ§ λ 벨μ μ μΈν λͺ¨λ λ 벨μ λ Έλκ° μ΅λ κ°μλ‘ μ±μμ Έ μμ΅λλ€.
- λ§μ§λ§ λ 벨μ λ Έλλ€μ μΌμͺ½λΆν° μ€λ₯Έμͺ½μΌλ‘ μ±μμ Έ μμ΅λλ€.
-
λ
Έλμ λ°°μΉ
- νΈλ¦¬μ λμ΄κ° βhβ λΌλ©΄, λ§μ§λ§ λ 벨μ μ μΈν λͺ¨λ λ 벨μλ β2^kβ κ°μ λ Έλκ° μμ΅λλ€. μ¬κΈ°μ βkβ λ ν΄λΉ λ 벨μ κΉμ΄ μ λλ€.
- λ§μ§λ§ λ 벨μλ 1κ° μ΄μ β2^hβ κ° μ΄νμ λ Έλκ° μμΌλ©°, μ΄ λ Έλλ€μ μΌμͺ½λΆν° μ±μμ§λλ€.
2οΈβ£ μμ μ΄μΉ νΈλ¦¬μ μ.
1
/ \
2 3
/ \ / \
4 5 6 7
/ \
8 9
μμ νΈλ¦¬λ μμ μ΄μ§ νΈλ¦¬μ μμ λλ€.
λͺ¨λ λ λ²¨μ΄ μμ ν μ±μμ Έ μκ³ , λ§μ§λ§ λ 벨μ λ Έλλ€μ μΌμͺ½λΆν° μ€λ₯Έμͺ½μΌλ‘ μ±μμ Έμμ΅λλ€.
3οΈβ£ μμ μ΄μ§ νΈλ¦¬μ μμ±.
-
λ
Έλ μ
- λμ΄κ° βhβ μΈ μμ μ΄μ§ νΈλ¦¬λ μ΅λ β2^(h+1) - 1β κ°μ λ Έλλ₯Ό κ°μ§ μ μμ΅λλ€.
- λ§μ§λ§ λ 벨μ μ μΈν λͺ¨λ λ Έλλ β2^h - 1β κ°μ λ Έλλ₯Ό κ°μ§λλ€.
-
λμ΄
- λ Έλ μκ° βnβ μΈ μμ μ΄μ§ νΈλ¦¬μ λμ΄λ βO(log n)β μ λλ€.
-
λ°°μ΄ νν
- μμ μ΄μ§ νΈλ¦¬λ λ°°μ΄μ μ¬μ©νμ¬ μ½κ² ννν μ μμ΅λλ€. μ΄λ ν μλ£κ΅¬μ‘°μμ λ§μ΄ μ¬μ©λ©λλ€.
4οΈβ£ λ°°μ΄μ ν΅ν μμ μ΄μ§ νΈλ¦¬ νν
μμ μ΄μ§ νΈλ¦¬λ λ°°μ΄μ μ¬μ©νμ¬ ν¨μ¨μ μΌλ‘ ννν μ μμ΅λλ€.
λ Έλμ μΈλ±μ€λ₯Ό κΈ°μ€μΌλ‘ λΆλͺ¨-μμ κ΄κ³λ₯Ό μ½κ² νμ ν μ μμ΅λλ€.
λ Έλμ μΈλ±μ€ κ·μΉ
- λ£¨νΈ λ Έλ : μΈλ±μ€ 0
- μΈλ±μ€ βiβμ μ€λ₯Έμͺ½ μμ λ Έλ : β2*i + 1β
- μΈλ±μ€ βiβμ λΆλͺ¨ λ Έλ : β(i - 1) / 2β
5οΈβ£ μμ μ½λ
μλλ μμ μ΄μ§ νΈλ¦¬λ₯Ό λ°°μ΄λ‘ νννκ³ , μ΄λ₯Ό μΆλ ₯νλ κ°λ¨ν μμ μ½λμ λλ€.
public class CompleteBinaryTree {
public static void main(String[] args) {
int[] tree = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// νΈλ¦¬ μΆλ ₯
printTree(tree);
}
// λ°°μ΄λ‘ ννλ μμ μ΄μ§ νΈλ¦¬ μΆλ ₯
public static void printTree(int[] tree) {
for (int i = 0; i < tree.length; i++) {
int leftChildIndex = 2 * i + 1;
int rightChildIndex = 2 * i + 2;
System.out.print("Node " + tree[i] + ": ");
if (leftChildIndex < tree.length) {
System.out.print("Left Child: " + tree[leftChildIndex] + ", ");
} else {
System.out.print("Left Child: null, ");
}
if (rightChildIndex < tree.length) {
System.out.print("Right Child: " + tree[rightChildIndex]);
} else {
System.out.print("Right Child: null");
}
System.out.println();
}
}
}
/* μΆλ ₯
Node 1: Left Child: 2, Right Child: 3
Node 2: Left Child: 4, Right Child: 5
Node 3: Left Child: 6, Right Child: 7
Node 4: Left Child: 8, Right Child: 9
Node 5: Left Child: null, Right Child: null
Node 6: Left Child: null, Right Child: null
Node 7: Left Child: null, Right Child: null
Node 8: Left Child: null, Right Child: null
Node 9: Left Child: null, Right Child: null
*/
μ€λͺ
-
νΈλ¦¬ λ°°μ΄ μ΄κΈ°ν :
int[] tree = {1, 2, 3, 4, 5, 6, 7, 8, 9};
- μμ μ΄μ§ νΈλ¦¬λ₯Ό λ°°μ΄λ‘ ννν©λλ€.
-
νΈλ¦¬ μΆλ ₯ :
printTree(tree)
- λ°°μ΄λ‘ ννλ μμ μ΄μ§ νΈλ¦¬λ₯Ό μΆλ ₯νλ ν¨μμ λλ€.
- κ° λ Έλμ λν΄ μΌμͺ½ μμκ³Ό μ€λ₯Έμͺ½ μμμ μΆλ ₯ν©λλ€.
μκ° λ³΅μ‘λ
- μ½μ (Insertion) : O(log n)
- μμ (Deletion) : O(log n)
- νμ(Search) : O(n) (μΌλ°μ μΌλ‘ μμ μ΄μ§ νΈλ¦¬λ νμλ³΄λ€ μ½μ /μμ κ° μ£Όλ μ°μ°μ λλ€.)
μμ μ΄μ§ νΈλ¦¬λ λ°μ΄ν°μ ꡬ쑰μ νΉμ± λλ¬Έμ νκ³Ό κ°μ μλ£κ΅¬μ‘°μμ λ§μ΄ μ¬μ©λ©λλ€.
μ΄λ ν¨μ¨μ μΈ μ½μ λ° μμ μ°μ°μ μ 곡νλ©°, λ°°μ΄μ ν΅ν ννμ΄ κ°νΈνμ¬ λ€μν μκ³ λ¦¬μ¦μμ μ μ©νκ² μ¬μ©λ©λλ€.