250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 점근적 표기법
- 자료구조
- 백준 장학금
- 이분탐색이란
- spring
- 스케줄링
- 강화학습
- 최소힙
- 알고리즘
- 완전이진트리
- 힙트리
- 엔티티 그래프
- 멀티프로세서
- HTTP
- JVM
- posix
- MSA
- Kruskal
- heapq
- 운영체제
- JPA
- jpa n+1 문제
- 백준장학금
- AVL트리
- 연결리스트
- SpringSecurity
- 프로세스
- python
- 연결리스트 종류
- 최대 힙
Archives
- Today
- Total
KKanging
[자료구조] 이진트리란 && 전위 중위 후위 순회 구현(Java) 본문
이진트리
- 많아야 두 개의 자식 노드를 가짐
- 왼쪽 자식과 오른쪽 자식으로 구분
- 완전이진트리처럼 트리의 균형이 유지가 되지 않음
- 균형이 없는 트리이기 때문에 연결리스트로 표현하는 게 적합
- root node로부터 이진트리를 표현한다.
- 연결리스트로 표현 돼서 배열처럼 트리의 원소를 찾기 힘들다.
- 그래서 이진트리는 순회 알고리즘을 이용해서 노드의 수나 정점을 찾는다.

이진트리의 순회 방법
- 전위 (VLR)
- 중위 (LVR)
- 후위 (LRV)
기준은 visit을 기준으로 전위 중위 후위를 나눈다
전위(Preorder traversal)
root node부터 시작한다.
- Visit 하고
- 왼쪽(left)으로 가고(visit)한다.
- 왼쪽이 없으면 오른쪽으로 간다.(Right)

- 위 순서대로 방문한다.
중위(Inorder traversal)
root node부터 시작한다.
- 왼쪽(left)으로 가고(visit)한다.
- Visit 하고
- 왼쪽이 없으면 오른쪽으로 간다.(Right)

후위(Postorder traversal)
root node부터 시작한다.
- 왼쪽(left)으로 가고(visit)한다.
- 왼쪽이 없으면 오른쪽으로 간다.(Right) 오른쪽이 없으면
- Visit 한다.

트리의 노드 수와 리프노드 수
- 전위 중위 후위를 사용해서 노들의 수를 알 수 있다.
- 전위 중위 후위를 사용해서 리프노드의 수를 알 수 있다.
순회 구현 (Java)
class Node{
int data;
Node left;
Node right;
public Node(int data){
this.data = data;
this.left = null;
this.right = null;
}
}
public class Main {
public static void VLR(Node root){
if (root == null){
return;
}
else{
System.out.print(root.data+"->");
VLR(root.left);
VLR(root.right);
return;
}
}
public static void LVR(Node root){
if(root == null){
return;
}
else{
LVR(root.left);
System.out.print(root.data + "->");
LVR(root.right);
}
}
public static void LRV(Node root){
if(root == null){
return;
}
else{
LRV(root.left);
LRV(root.right);
System.out.print(root.data + "->");
}
}
public static void main(String []args){
Node root = new Node(10);
root.left = new Node(15);
root.right = new Node(20);
root.left.right = new Node(3);
root.left.right.right = new Node(6);
root.right.left = new Node(8);
VLR(root);
System.out.println();
LVR(root);
System.out.println();
LRV(root);
}
}
'cs > 자료구조' 카테고리의 다른 글
[자료구조]그래프란 (0) | 2023.07.27 |
---|---|
[자료구조] 이진탐색트리의 개념과 구현(Java) (0) | 2023.07.24 |
[자료구조] 힙트리의 정의 와 구현 (Java) (0) | 2023.07.15 |
[자료구조] 완전 이진트리란? (0) | 2023.07.14 |
[자료구조] 트리란? (0) | 2023.07.13 |