Binary Search Tree Array Implementation
Problem: λ°°μ΄μ μ΄μ©νμ¬ μ΄μ νμ νΈλ¦¬λ₯Ό λ§λ€κ³ νμνλ νλ‘κ·Έλ¨μ μμ±νλΌ. μ λ ₯ : μ λ ¬μ΄ λμ§ μμ μ«μλ€ νλ‘κ·Έλ¨ : 2.1 μ λ ₯λ μ«μλ€μ νλμ© μ½μΌλ©΄μ μ΄μ νμ νΈλ¦¬ λ°°μ΄ λ§λ€κΈ° 2.2 μ«μ νλλ₯Ό μ λ ₯νλ©΄ μ΄μνμνΈλ¦¬ μκ³ λ¦¬μ¦μ μ μ©νμ¬ ν΄λΉνλ λ°°μ΄μ 첨μλ₯Ό μΆλ ₯νκΈ° (μ΄ λ μΆλ ₯μ λ°°μ΄ μμλ€μ μ°¨λ‘λλ‘ μΆλ ₯νκ³ ν΄λΉνλ λ°°μ΄ μ²¨μλ₯Ό μΆλ ₯) Execution Result: Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 #include using namespace std; void newBinarySearchTree(int *num_arr, int size, int *new_num_arr) { for(int i=0; i<size+20; i++){ // μ΄μνμνΈλ¦¬ λ°°μ΄ -1λ‘ μ΄κΈ°ν new_num_arr[i] = -1; } new_num_arr[0] = num_arr[0]; for(int i=1; i<size; i++){ int index=0; // μλ‘ λ€μ΄μ¬ μ«μκ° μ΄μνμνΈλ¦¬ λ°°μ΄μ 루νΈλ³΄λ€ μμΌλ©΄ μΌμͺ½μΌλ‘ μ΄λ if(new_num_arr[0] > num_arr[i]) { for(int j=2*index+1;;) { if(new_num_arr[j] != -1){ //μ½μ νλ €λ μ΄μνμνΈλ¦¬ λ°°μ΄κ³΅κ°μ΄ NULLμ΄ μλλ©΄ λΉκ΅ if(new_num_arr[j] < num_arr[i]) j=2*j+2; // μ½μ νκ³ μ νλ μ«μκ° λ ν¬λ©΄ 2j+2 else if(new_num_arr[j] > num_arr[i]) j=2*j+1; // μ½μ νκ³ μ νλ μ«μκ° λ μμΌλ©΄ 2j+1 z else { //κ°μ μ«μκ° λμ€λ©΄ μ€λ₯λ©μμ§ μΆλ ₯ ν νλ‘κ·Έλ¨ λΉμ μ μ’ λ£ cout << "same data error...\n"; exit(1); } } else if(new_num_arr[j] == -1) { // μ½μ νλ €λ μ΄μνμνΈλ¦¬ λ°°μ΄ κ³΅κ°μ΄ NULLμ΄λ©΄ λ°λ‘ μ½μ new_num_arr[j] = num_arr[i]; break; } } } // μλ‘ λ€μ΄μ¬ μ«μκ° μ΄μνμνΈλ¦¬ λ°°μ΄μ 루νΈλ³΄λ€ ν¬λ©΄ μ€λ₯Έμͺ½μΌλ‘ μ΄λ else if(new_num_arr[0] < num_arr[i]) { for(int j=2*index+2;;) { if(new_num_arr[j] != -1){ // μ½μ νλ €λ μ΄μνμνΈλ¦¬ λ°°μ΄κ³΅κ°μ΄ NULLμ΄ μλλ©΄ λΉκ΅ if(new_num_arr[j] < num_arr[i]) j=2*j+2; else if(new_num_arr[j] > num_arr[i]) j=2*j+1; else { cout << "same data error...\n"; exit(1); } } else if(new_num_arr[j] == -1) { new_num_arr[j] = num_arr[i]; break; } } } else continue; } } void find(int *new_num_arr, int size) { int x, flag; cout << "μ°Ύκ³ μ νλ μ«μ μ λ ₯ : "; cin >> x; for(int i=0; i<size; i++) // μ΄μνμνΈλ¦¬ λ°°μ΄μ λͺ¨λ μμ μΆλ ₯ cout << "arr[" << i << "] : " << new_num_arr[i] << endl; for(int i=0; i<size; i++){ if(new_num_arr[i] == x) { cout << "index : " << i; flag = true; break; } else flag = false; } if(!flag) // flagκ° falseμ΄λ©΄ μ°Ύκ³ μ νλ μ«μκ° μλ€κ³ μΆλ ₯ cout << "μ°Ύκ³ μ νλ μ«μ μμ\n"; } int main() { int num_arr[] = {50, 40, 55, 30, 45, 54, 53, 1, 60, 301, 2}; int num_arr_size = sizeof(num_arr)/sizeof(num_arr[0]); int *new_num_arr = new int [num_arr_size + 20]; // μ΄μνμνΈλ¦¬ λ°°μ΄ κ³΅κ° μμ± newBinarySearchTree(num_arr, num_arr_size, new_num_arr); find(new_num_arr, num_arr_size + 20); } Explanation: ...