동아리
동아리에서는 가입한 학생들의 학번을 이진탐색트리로 관리하려고 한다.
처음 동아리에는 아무도 가입되어 있지 않다.
이후 n개의 쿼리가 주어진다.
쿼리는 다음 세 가지이다.
1 x: 학번이x인 학생이 동아리에 가입한다.- 이미 가입되어 있는 학번이면 무시한다.
2 x: 학번이x인 학생이 동아리에서 탈퇴한다.- 가입되어 있지 않은 학번이면 무시한다.
3: 현재 동아리에 가입된 학생들의 학번을 오름차순으로 출력한다.
쿼리 3은 현재 동아리에 가입된 학생이 적어도 한 명 있을 때만 입력된다.
쿼리 3이 주어질 때마다 현재 동아리에 가입된 학생들의 학번을 학번순으로 출력하는 프로그램을 작성하시오.
입력 설명
첫째 줄에 쿼리의 개수 n이 입력된다.
1 <= n <= 100
둘째 줄부터 n개의 줄에 걸쳐 쿼리가 입력된다.
- 가입 쿼리는
1 x형식으로 주어진다. - 탈퇴 쿼리는
2 x형식으로 주어진다. - 출력 쿼리는
3형식으로 주어진다.
학번 x는 정수이다.
1000 <= x <= 9999
출력 설명
쿼리 3이 입력될 때마다 현재 동아리에 가입된 학생들의 학번을 오름차순으로 출력한다.
각 학번은 공백으로 구분하여 출력한다.
입력 예시 1
8
1 3104
1 2107
1 3201
3
2 2107
3
1 3104
3
출력 예시 1
2107 3104 3201
3104 3201
3104 3201
입력 예시 2
9
1 2305
1 1102
1 1208
3
2 3301
2 1102
3
2 1208
3
출력 예시 2
1102 1208 2305
1208 2305
2305
front
#include<stdio.h>
#include<stdlib.h>
struct Tnode { int d; Tnode *left,*right; };
struct BST {
private:
Tnode *root=NULL;
public:
void setRoot(Tnode * t) { root=t; }
Tnode* getRoot() { return root; }
Tnode* insert(Tnode *t,int d);
void inorder(Tnode *t);
Tnode *searchMin(Tnode *t, Tnode *p);
void deleteNode(Tnode *t, Tnode *p, int d);
};
rear
int main() {
int n;
BST bst;
scanf("%d",&n);
for(int i=0;i<n;i++) {
int a;
scanf("%d", &a);
if (a == 1) {
int d;
scanf("%d", &d);
bst.setRoot(bst.insert(bst.getRoot(), d));
}
else if (a == 2) {
int d;
scanf("%d", &d);
bst.deleteNode(bst.getRoot(), NULL, d);
}
else {
bst.inorder(bst.getRoot());
printf("\n");
}
}
}
코멘트