들어가기에 앞서
해당 글을 작성하기에 앞서 이진트리는 어떤 것인지에 대한 사전 지식이 있어야 이해할 수 있는 글입니다.
만약 이진트리가 무엇인지 모른다면 이 글을 읽고 오시기 바랍니다.
이진 트리 순회
이진 트리를 순회하는 방법에는 어디서부터 확인하느냐로 4가지로 나눌 수 있습니다.
순회 방법에 따라 사용처가 다르게 나오게 되고, 이를 학습함으로써 좀 더 본인이 사용하고자 하는 목적에 알맞은 방법으로 알고리즘을 작성할 수 있습니다.
아래 보이는 이진 트리를 통해 각각의 순회 결과에 대해 알려드리겠습니다.
아래 이진 트리는 이 곳에서 코드로 확인해 보실 수 있습니다.
전위 순회 ( Pre-order Traversal )
전위 순회는 부모 노드 -> 왼쪽 노드 -> 오른쪽 노드 순으로 재귀하며 출력하는 방법입니다.
즉 가장 왼쪽부터 라인부터 탐색하며, 가장 깊은 Level의 오른쪽 노드부터 차근차근 탐색할 수 있게 해줍니다.
public void traversePreOrder(TreeNode<Integer> node) {
if (node != null) {
System.out.print(" " + node.getValue());
traversePreOrder(node.getLeft());
traversePreOrder(node.getRight());
}
}
결과
사용처
- DFS 탐색
- 트리 복사
중위 순회 ( In-order Traversal )
중위 순회는 왼쪽 자식 노드 -> 부모 노드 -> 오른쪽 자식노드 순으로 순회하는 방법입니다.
public void traverseInOrder(TreeNode<Integer> node) {
if (node != null) {
traverseInOrder(node.getLeft());
System.out.print(" " + node.getValue());
traverseInOrder(node.getRight());
}
}
결과
사용처
- 오름차순 정렬
- 정렬된 데이터 탐색
후위 순회 ( Post-order Traversal )
후위 순회는 왼쪽 자식노드 -> 오른쪽 자식노드 -> 부모 노드 순으로 순회하는 방법입니다.
public void traversePostOrder(TreeNode node) {
if (node != null) {
traversePostOrder(node.getLeft());
traversePostOrder(node.getRight());
System.out.print(" " + node.getValue());
}
}
결과
사용처
- 메모리 해제
- 파일 구조 삭제
- 후위 표기법을 통한 연산
레벨 순회 ( Level-order Traveral )
레벨 순회는 root 부터 각 레벨마다 순차적으로 왼쪽부터 오른쪽으로 순회하는 방법입니다.
public void traverseLevelOrder(TreeNode root) {
if (root == null) return;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.print(" " + node.getValue());
if (node.getLeft() != null) queue.add(node.getLeft());
if (node.getRight() != null) queue.add(node.getRight());
}
}
결과
사용처
- 최단 경로 탐색
- Bfs 탐색
Reference
https://www.w3schools.com/dsa/dsa_data_binarysearchtrees.php
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
'알고리즘 문제풀이 > 자료구조' 카테고리의 다른 글
[ Tree ] 이진 탐색 트리 삽입, 삭제 (0) | 2024.11.16 |
---|---|
[Tree] 이진 트리 ( Binary Tree ) (0) | 2024.11.07 |
[자료구조] 스택(Stack) (0) | 2024.10.21 |