하...
내 자신이 너무 바보같다.
이문제 이렇게 어려운 문제인가요??? ㅠㅠ 3시간은 잡고 있었네 ㅠㅠ
정답인데 더 좋은 방법없을까요?
알고리즘 고수형님들 저의 허접한 소스코드 좀 보시고 많은 지적 좀 부탁드립니다.
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 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include <iostream> #define SIZE 1001 using namespace std; typedef struct tree * TreePtr; typedef struct tree { char data; TreePtr left; TreePtr right; }Tree; TreePtr LevelSearch(TreePtr mPtr, char mData) { TreePtr Queue[SIZE]; int REAR = 0, FRONT = 0; Queue[REAR] = mPtr; REAR = (REAR + 1) % SIZE; while (REAR != FRONT) { mPtr = Queue[FRONT]; FRONT = (FRONT + 1) % SIZE; if (mPtr->data == mData) { return mPtr; } if (mPtr->left) { Queue[REAR] = mPtr->left; REAR = (REAR + 1) % SIZE; } if (mPtr->right) { Queue[REAR] = mPtr->right; REAR = (REAR + 1) % SIZE; } } return NULL; } void Inorder(TreePtr mPtr) { if (mPtr) { Inorder(mPtr->left); cout << mPtr->data; Inorder(mPtr->right); } } void Postorder(TreePtr mPtr) { if (mPtr) { Postorder(mPtr->left); Postorder(mPtr->right); cout << mPtr->data; } } void Preorder(TreePtr mPtr) { if (mPtr) { cout << mPtr->data; Preorder(mPtr->left); Preorder(mPtr->right); } } int main(void) { int mNum = 0; cin >> mNum; TreePtr Node = new Tree{'A', NULL, NULL}; TreePtr Root = Node; char mChar[] = {NULL, NULL, NULL}; for (int count = 0; count < mNum; count++) { cin >> mChar[0] >> mChar[1] >> mChar[2]; TreePtr mTemp = LevelSearch(Root, mChar[0]); if (mTemp) { Node = mTemp; if (mChar[1] != '.') { Node->left = new Tree{ mChar[1], NULL, NULL }; } if (mChar[2] != '.') { Node->right = new Tree{ mChar[2], NULL, NULL }; } } } Preorder(Root); cout << endl; Inorder(Root); cout << endl; Postorder(Root); cout << endl; return 0; } | cs |
트리를 쓰긴 쓰는데 배열 몇 개만 있으면 될것 같은데
struct { char left, char right } node[128] 이렇게 써놓고 항목 받은 다음에 left right에 넣으면 되지. 그다음은 순회랑 똑같이 하면 될 것같은데 ... 근데 미리 항목은 0으로 초기화 해야겠다
근데 LevelSearch는 뭐임?
답변감사합니다. 저도 위 방식대로 배열로 해서 했는데 순회 돌리는 부분이 이해가 잘안되서요. 말씀하시는게 [*2]. [*2+1] 로 저장하는 건가요?
Level순회를 사용해서 위치 찾는 함수
순회 함수 모양과 호출 방법을 잘 보세요