일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Django의 편의성
- 입출력 패턴
- 엑셀
- 이분그래프
- vscode
- Django Nodejs 차이점
- c++
- 프레임워크와 라이브러리의 차이
- 시간복잡도
- 매크로
- scanf
- 표준 입출력
- getline
- string 메소드
- string 함수
- UI한글변경
- 2557
- 연결요소
- 알고리즘 공부방법
- 자료구조
- EOF
- 구조체와 클래스의 공통점 및 차이점
- 장고란
- Django란
- double ended queue
- k-eta
- 입/출력
- iOS14
- 백준
- correlation coefficient
Archives
- Today
- Total
Storage Gonie
(1) [C++, Java] 백준 No.1991 : 트리 순회 본문
반응형
문제
풀이
자세한 풀이 : https://ldgeao99.tistory.com/entry/챕터7-3-트리-문제풀이
# C++(2차원 배열로 왼쪽자식과 오른쪽 자식을 저장하는 방식)
# include <iostream>
using namespace std;
int arr[26][2];
void preOrder(int x){
if(x == -1)
return;
cout << (char) (x + 'A');
preOrder(arr[x][0]);
preOrder(arr[x][1]);
}
void inOrder(int x){
if(x == -1)
return;
inOrder(arr[x][0]);
cout << (char) (x + 'A');
inOrder(arr[x][1]);
}
void postOrder(int x){
if(x == -1)
return;
postOrder(arr[x][0]);
postOrder(arr[x][1]);
cout << (char) (x + 'A');
}
int main()
{
int n;
cin >> n;
// 입력으로부터 트리의 정보 저장하기(문자로 된것을 모두 숫자로 저장)
while(n--){
char parent, leftChild, rightChild;
cin >> parent >> leftChild >> rightChild;
// 부모노드
parent = parent - 'A';
// 왼쪽 자식노드의 값 삽입
if (leftChild == '.')
arr[parent][0] = -1;
else
arr[parent][0] = leftChild - 'A';
// 오른쪽 자식노드의 값 삽입
if (rightChild == '.')
arr[parent][1] = -1;
else
arr[parent][1] = rightChild - 'A';
}
// 트리를 순회하여 출력
preOrder(0);
cout << "\n";
inOrder(0);
cout << "\n";
postOrder(0);
cout << "\n";
}
# Java(2차원 배열로 왼쪽자식과 오른쪽 자식을 저장하는 방식)
import java.util.*;
public class Main {
public static void preorder(int[][] a, int x) {
if (x == -1) return;
System.out.print((char)(x+'A'));
preorder(a,a[x][0]);
preorder(a,a[x][1]);
}
public static void inorder(int[][] a, int x) {
if (x == -1) return;
inorder(a,a[x][0]);
System.out.print((char)(x+'A'));
inorder(a,a[x][1]);
}
public static void postorder(int[][] a, int x) {
if (x == -1) return;
postorder(a,a[x][0]);
postorder(a,a[x][1]);
System.out.print((char)(x+'A'));
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
int[][] a = new int[26][2];
for (int i=0; i<n; i++) {
String line = sc.nextLine();
int x = line.charAt(0) - 'A';
char y = line.charAt(2);
char z = line.charAt(4);
if (y == '.') {
a[x][0] = -1;
} else {
a[x][0] = y-'A';
}
if (z == '.') {
a[x][1] = -1;
} else {
a[x][1] = z-'A';
}
}
preorder(a,0);
System.out.println();
inorder(a,0);
System.out.println();
postorder(a,0);
System.out.println();
}
}
반응형
'알고리즘 > 백준풀이10. 트리' 카테고리의 다른 글
(3) [C++, Java] 백준 No.1167 : 트리의 지름 (0) | 2019.05.23 |
---|---|
(2) [C++, Java] 백준 No.11725 : 트리의 부모 찾기 (0) | 2019.05.23 |
Comments