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:
...