서브트리 : 전체 트리에 속한 작은 트리
노드 : 데이터의 인덱스와 value를 표현하는 요소
위 과정을 찾고자 하는 값을 찾을때 까지 반복해서 진행한다.
만약 값을 찾지 못한다면 그대로 종료한다.
이러한 탐색 과정을 거치면 최대 트리의 높이(h)만큼 탐색이 진행되게 된다.
.
.
.
고통의 시작..
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int[] tree = new int[10000];
// start : 현재 서브트리의 루트노드 , end : 해당 서브트리의 끝노드의 다음 인덱스
static void postOrder(int start, int end) {
int i;
// 서브트리가 비어있거나 노드가 하나인 경우는 바로 리턴해 아무 작업도 수행하지 않는다.
if (start >= end) {
return;
}
for (i = start+1; i < end; i++) {
if(tree[start] < tree[i] )break;
}
// i를 기준으로 왼쪽 서브트리를 후위순회
postOrder(start+1, i);
// i를 기준으로 오른쪽 서브트리를 후위순회
postOrder(i, end);
// 현재 노드값 출력
System.out.println(tree[start]);
return ;
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i = 0;
String input;
// 입력받기
while((input = br.readLine()) != null) {
tree[i++] = Integer.parseInt(input);
}
// 후위순회 호출
postOrder(0, i);
}
}
코드에 대해 직접 풀어본 풀이,,
재귀함수과 재귀호출에 대한 개념이 많이 아주 많이 부족한 상태에서 재귀호출이 2번이나 일어나는 문제를 풀려하니까 아주 힘들었다,,
거의 2일넘게해서 어떻게 알고리즘이 풀어지는지 이해하고 풀어봤지만 확실한 이해와 반복적으로 문제를 풀어봐야겠다.