๐Ÿ’ป Dev & CSiOS & Others

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

March 19, 2020 ยท 3 min ยท Sobamemil