6. 자료구조 & 알고리즘/6-1. 자료구조
자료구조 - [ 이진 트리 순회 ( 깊이 우선 / 너비 우선 ) ]
yunyj99
2022. 8. 10. 00:05
1. 깊이 우선 탐색
1) 전위 순회 (pre-order)
부모 노드를 선 방문 후 좌측 서브 트리와 우측 서브 트리를 방문하는 방법
void visit(Node node) {
System.out.println(node.data);
}
void preOrder(Node parent) {
if (null == parent) {
return;
}
visit(parent);
preOrder(parent.left);
preOrder(parent.right);
}
2) 중위 순회 (in-order)
좌측 서브 트리를 방문하고 부모를 방문 후 우측 서브 트리를 방문하는 방법
void visit(Node node) {
System.out.println(node.data);
}
void inOrder(Node parent) {
if (null == parent) {
return;
}
inOrder(parent.left);
visit(parent);
inOrder(parent.right);
}
3) 후위 순회 (post-order)
좌측 서브 트리를 방문하고 우측 서브 트리를 방문 후 부모를 방문하는 방법
void visit(Node node) {
System.out.println(node.key);
}
void postOrder(Node parent) {
if (null == parent) {
return;
}
postOrder(parent.left);
postOrder(parent.right);
visit(parent);
}
2. 너비 우선 탐색
트리의 상위 레벨부터 하위 레벨까지 순차적으로 탐색해서 레벨 순회라고도 불린다.
깊이 우선 탐색에서는 스택 방식을 이용한 재귀적인 코드로 작성했으나 레벨 순회는 큐를 이용하여 순회한다.
- 레벨 순회 방법은 다음과 같다.
- 루트 노드를 큐에 삽입
- 큐에 있는 노드를 꺼내 방문
- 노드의 좌측 자식 노드를 큐에 삽입
- 노드의 우측 자식 노드를 큐에 삽입
- 큐가 비어있을 때 까지 2번 부터 반복
void visit(Node node) {
System.out.println(node.key);
}
void levelOrder() {
Queue<Node> queue = new LinkedList();
if (null == root) {
return;
}
queue.offer(root);
while(!queue.isEmpty()) {
Node parent = queue.poll();
visit(parent);
if (null != parent.left) {
queue.offer(parent.left);
}
if (null != parent.right) {
queue.offer(parent.right);
}
}
}
참조
https://www.codelatte.io/courses/java_data_structure
자바 자료구조 강의 - 코드라떼
컴퓨터 공학 2단계 자바 자료구조 강의입니다. 대부분의 프로그래밍하는 과정은 데이터를 다루는 일입니다. 데이터를 어떻게 잘 저장하고 관리할 수 있는지 자료구조에 대해 배웁니다. 자료구
www.codelatte.io