일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 코틀린기초
- 프로그래머스
- 백준 1197번 최소 스패닝 트리 - java
- 백준 3190번
- 18111번 마인크래프트 - java 구현
- 백준 1541
- 최소 힙 1927
- kotlin
- 백준 1647번 도시 분할 계획 - java
- dp
- 프로그래머스 자바
- mysql hy000 에러
- 백준 1043번 거짓말 - java 분리 집합
- toUpperCase
- HashSet
- Java
- map
- 백준 2467번 용액 자바 - 이분탐색
- append
- hash
- Stack
- 백준 2473번 세 용액 - java
- 백준 1806번 부분합 java
- StringBuilder
- 프로그래머스 java
- replace()
- 백준 14938번 서강그라운드
- StringTokenizer
- ac 5430번
- HashMap
Archives
- Today
- Total
말하는 컴공감자의 텃밭
백준 1991번 트리순회 S1 - 전위 중위 후위 순회 본문
728x90
이진트리 입력이 주어지고, 해당 트리를
전위 중위 후위한 결과를 출력하는 문제이다.
입력에 . 은 자식이 없다는 의미로 받아주면 된다.
트리를 순회할때는 큰 삼각형을 작은 삼각형으로 쪼개서 순회한다고 생각했다.
따라서 재귀함수로 작성하는게 문제의 포인트이다.
Node 클래스로 왼쪽과 오른쪽 자식을 관리해 주었고,
'.' 입력이 주어질때는 자식에 Null을 주는 방식으로 처리를 했다.
전위 순회의 경우 루트 먼저, 이후 왼 > 오 자식을 순회하고.
중위의 경우 왼쪽 아래까지 쭉 내려갔다가 더이상 자식이 없으면 루트, 오른쪽 자식을 찾는 방식이다.
마지막으로 후위는 왼쪽 아래 탐색 후 오른쪽 아래 탐색. 이후 없다면 부모 노트 체크. 이다.
결론적으로
전위는 출력하고 왼쪽 오른쪽 재귀함수를 호출.
중위는 왼쪽 재귀를 호출 후 출력. 이후 오른쪽 재귀 호출.
후위는 왼쪽 오른쪽 재귀 호출 후 출력이 되겠다.
정리가 잘되어 있어서 가져왔다 ^<^.//
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | import java.io.*; import java.util.*; class Node { String value; Node left; Node right; Node(String value, Node left, Node right) { this.value = value; this.left = left; this.right = right; } } public class Main { // Boj_1991_트리 순회 static int N; // 루트는 A로 고정 static Node head = new Node("A", null, null); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); StringTokenizer st; for(int tc = 0; tc<N; tc++) { st = new StringTokenizer(br.readLine()); String now = st.nextToken(); String left = st.nextToken(); String right = st.nextToken(); setNode(head, now, left, right); } preOrder(head); System.out.println(); inOrder(head); System.out.println(); postOrder(head); } public static void setNode(Node head, String root, String left, String right) { if (head.value.equals(root)) { // 처음 나온 알파뱃이면 새로 만들기. head.left = (left.equals(".")) ? null : new Node(left, null, null); head.right = (right.equals(".")) ? null : new Node(right, null, null); } else { if (head.left != null) { setNode(head.left, root, left, right); } if (head.right != null) { setNode(head.right, root, left, right); } } } public static void preOrder(Node node) { // 전위 if (node == null) return; System.out.print(node.value); preOrder(node.left); preOrder(node.right); } public static void inOrder(Node node) { // 중위 if (node == null) return; inOrder(node.left); System.out.print(node.value); inOrder(node.right); } public static void postOrder(Node node) { // if (node == null) return; postOrder(node.left); postOrder(node.right); System.out.print(node.value); } } | cs |
참고 :: https://www.youtube.com/watch?app=desktop&v=WLvU5EQVZqY
728x90
'알고리즘 > Backjoon - Java' 카테고리의 다른 글
백준 1240번 노드사이의 거리 G5 - bfs (0) | 2024.04.17 |
---|---|
백준 11725번 트리의 부모 찾기 S1 - 트리 (1) | 2024.04.03 |
백준 23349번 졸업 사진 S1 - Hash (0) | 2024.03.28 |
백준 20408번 춘배가 선물하는 특별한 하트 G5 - Hash (0) | 2024.03.28 |
백준 22252번 정보 상인 호석 G5 - Java, Hash, 우선순위 큐 (0) | 2024.03.26 |
Comments