BST 만들기


답안 제출

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

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

반 친구들의 명단을 입력받아 BST(Binary Search Tree)에 저장해 보려고 한다.

저장이 끝난 다음 잘 저장되었는지 확인하기 위해 BST를 다음 세 가지 방식으로 순회하여 저장된 학생들의 이름을 출력하시오.

  • preorder
  • inorder
  • postorder

만약 실수로 학번이 같은 학생이 입력되면, 그 학생의 데이터는 저장하지 않는다.

입력 설명

학생 수 n이 입력된다.

다음 줄부터 n줄 동안 학번 no와 이름 name이 입력된다.

출력 설명

첫 번째 줄에는 BST를 preorder 방식으로 순회했을 때의 순서대로 학생들의 이름을 출력한다.

두 번째 줄에는 BST를 inorder 방식으로 순회했을 때의 순서대로 학생들의 이름을 출력한다.

세 번째 줄에는 BST를 postorder 방식으로 순회했을 때의 순서대로 학생들의 이름을 출력한다.

제한

  • 1 ≤ n ≤ 100

입력 예시

5
10 AAA
13 BBB
5 CCC
7 DDD
1 EEE

출력 예시

AAA CCC EEE DDD BBB
EEE CCC DDD AAA BBB
EEE DDD CCC BBB AAA

front

#include<stdio.h>
#include<stdlib.h>

struct Data { int no; char name[20]; };
struct Tnode { Data 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,Data d); 
    void preorder(Tnode *t); 
    void inorder(Tnode *t);
    void postorder(Tnode *t);
};

rear

int main() {
  int n;
  Data d;
  BST bst;
  scanf("%d",&n);
  for(int i=0;i<n;i++) {
    scanf("%d%s",&d.no, &d.name);
    bst.setRoot(bst.insert(bst.getRoot(), d));
  }
  bst.preorder(bst.getRoot());
  printf("\n");
  bst.inorder(bst.getRoot());
  printf("\n");
  bst.postorder(bst.getRoot());
  printf("\n");
}

코멘트

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