동아리


답안 제출

Points: 8
시간 제한: 1.0s
메모리 제한: 256M

문제 유형
허용된 언어
C++

동아리에서는 가입한 학생들의 학번을 이진탐색트리로 관리하려고 한다.

처음 동아리에는 아무도 가입되어 있지 않다.
이후 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");
    }
  }
}

코멘트

현재 작성된 코멘트가 없습니다.