이 글은 인프런 [자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 ] 강의를 수강하며 작성한 글입니다.
자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 - 인프런 | 강의
자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성
www.inflearn.com
이진트리 순회(DFS, Depth-First Search 깊이 우선 탐색)
전위순회 : 1 2 4 5 3 6 7
중위순회 : 4 2 5 1 6 3 7
후위순회 : 4 5 2 6 7 3 1
class Node {
int data;
Node lt, rt;
public Node(int val) {
this.data = val;
lt = rt = null;
}
}
public class Main {
private static Node root;
public static void DFS(Node root) {
if (root == null)
return;
else {
DFS(root.lt);
DFS(root.rt);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
root = new Node(1);
root.lt = new Node(2);
root.rt = new Node(3);
root.lt.lt = new Node(4);
root.lt.rt = new Node(5);
root.rt.lt = new Node(6);
root.rt.rt = new Node(7);
DFS(root);
}
}
위의 트리구조를 Node class를 이용하여 만든다.
DFS메소드 내에서 출력 라인을 어디에 두느냐에 따라 전위순회, 중위순회, 후위순회가 된다.
public static void DFS(Node root) {
if (root == null)
return;
else {
System.out.print(root.data + " ");
DFS(root.lt);
DFS(root.rt);
}
}
>> 전위순회
public static void DFS(Node root) {
if (root == null)
return;
else {
DFS(root.lt);
System.out.print(root.data + " ");
DFS(root.rt);
}
}
>> 중위순회
public static void DFS(Node root) {
if (root == null)
return;
else {
DFS(root.lt);
DFS(root.rt);
System.out.print(root.data + " ");
}
}
>> 후위순회
재귀과정을 좀 더 쉽게 이해하려면, 저번 게시글
2021.12.10 - [인프런 강의/자바 알고리즘 문제풀이: 코딩테스트 대비] - [알고리즘/java] 인프런 자바 알고리즘 강의 : 재귀함수
처럼 스택프레임을 직접 그려가며 따라가봐야 한다.
'알고리즘 > 자바 알고리즘 문제풀이: 코딩테스트 대비' 카테고리의 다른 글
[알고리즘/java] 송아지 찾기 1(BFS) (0) | 2021.12.15 |
---|---|
[알고리즘/java] 이진트리 레벨탐색(BFS) (0) | 2021.12.14 |
[알고리즘/java] 부분집합 구하기(DFS) (0) | 2021.12.11 |
[알고리즘/java] 재귀함수 - 피보나치 수열 (0) | 2021.12.10 |
[알고리즘/java] 재귀함수 (0) | 2021.12.10 |