티스토리 뷰
트리순회 결과 출력하기 (tree.cpp)
문제
이진 트리를 입력받아 전위순회, 중위순회, 후위순회 결과를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N이 주어진다. 이어 N개의 줄에는 트리의 연결 상황이 주어지는데 아래의 예와 같은 형식으로 각 줄에 그 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 매겨지며 항상 A가 루트 노드가 된다. 만약 특정 노드 사이의 자식이 하나이거나 없을 경우 자식 노드 대신 ‘.’이 주어진다. N은 26 이하의 자연수이다.
출력
첫째 줄에 전위순회 한 결과를, 둘째 줄에 중위순회 한 결과를, 셋째 줄에는 후위순회 한 결과를 출력한다.
예제 입력
7
A B C
B D .
C E F
E . .
F . G
D . .
G . .
예제 출력
ABDCEFG
DBAECFG
DBEGFCA
코드
//트리순회
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static ArrayList<Node> box = new ArrayList<>();
public static int count = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//총 몇개의 숫자를 입력 받을 것인지
int a;
int b = 1;
int c = 0;
Node node,leftNode,rightNode;
char input;
a = sc.nextInt();
for(int i = 0 ; i < a ; i++) {
input = sc.next().charAt(0);
node = findeNode(input);
input = sc.next().charAt(0);
if(input != '.') {
leftNode = findeNode(input);
node.setLeftChild(leftNode);
}
input = sc.next().charAt(0);
if(input != '.') {
rightNode = findeNode(input);
node.setRightChild(rightNode);
}
}
pre(findeNode('A'));
System.out.println("");
in(findeNode('A'));
System.out.println("");
post(findeNode('A'));
System.out.println("");
}
public static void pre(Node root) {
System.out.print(root.getData());
if(root.getLeftChild() != null) pre(root.getLeftChild());
if(root.getRightChild() != null) pre(root.getRightChild());
}
public static void in(Node root) {
if(root.getLeftChild() != null) in(root.getLeftChild());
System.out.print(root.getData());
if(root.getRightChild() != null) in(root.getRightChild());
}
public static void post(Node root) {
if(root.getLeftChild() != null) post(root.getLeftChild());
if(root.getRightChild() != null) post(root.getRightChild());
System.out.print(root.getData());
}
public static Node findeNode(char key) {
for(int i = 0 ; i < box.size() ; i++) {
if(box.get(i).getData() == key) {
return box.get(i);
}
}
return new Node(key);
}
}
class Node {
private char data;
private Node leftChild = null;
private Node rightChild = null;
public Node(char data) {
this.data = data;
Main.box.add(this);
}
public void setData(char data) {
this.data = data;
}
public char getData() {
return data;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getLeftChild() {
return leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}
}
'알고리즘 문제 풀이 ' 카테고리의 다른 글
공통조상찾기 (0) | 2018.09.27 |
---|---|
깊이우선탐색 / 너비우선탐색 (0) | 2018.09.27 |
부등호 (0) | 2018.09.20 |
좋은 수열 찾기 (0) | 2018.09.18 |
소들의 줄세우기 (0) | 2018.09.18 |
달팽이 그리기 (0) | 2018.09.17 |
자연수의 합 / Division (0) | 2018.09.17 |
단지번호 붙이기 (0) | 2018.09.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java #백준 #알고리즘 #2805 #나무자르기
- 백준 #알고리즘 #전깃줄 #NodeJs #javascript
- 쿼드트리
- webspider
- 색종이자르기
- Terminal
- webpack
- java #하노이 #알고리즘 #백준
- java #오르막수 #백준 #알고리즘
- TypeScript
- java #알고리즘 #백준 #패션왕신해빈
- java #알고리즘 #백준
- 중간거리 #야만나 #약속장소추천 #중간위치 #웹 #리액트 #React #reactjs #kakao지도 #kakaoapi
- java #퀵소트 #quicksort #알고리즘 #백준
- java #알고리즘 #백준 #퇴사
- 한글 자동 완성
- javascript #연속합 #알고리즘 #백준
- 백준 #java #알고리즘
- 백준
- 2630번
- javascript #백준 #회의실배정 #알고리즘
- java #백준 #알고리즘 #로또 #6603
- java #알고리즘 #백준 #N과M #백트래킹
- javascript #백준 #알고리즘 #LCS
- 1992번
- Game
- Javascript
- npm
- react
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함