1주차 1차 질문 - LeetCode-Study-Team/solutions GitHub Wiki
질문
- Q1. 링크드 리스트가 뭔가요? (@김유철)
- Q2. 트리순회 (@김태환)
전위 순회 (Preorder Traversal)
-
전위 순회는 깊이 우선 순회 (DFT, Depth-First Traversal) 이라고도 합니다.
-
트리를 복사하거나, 전위 표기법을 구하는데 주로 사용됩니다.
-
트리를 복사할 때 전위 순회를 사용하는 이유는 트리를 생성할 때 자식 노드 보다 부모 노드가 먼저 생성되어야 하기 때문입니다.
-
전위 순회는 다음과 같은 방법으로 진행합니다.
- Root 노드를 방문한다.
- 왼쪽 서브 트리를 전위 순회한다.
- 오른쪽 서브 트리를 전위 순회한다.
-
위 트리의 전위 순회 결과는 다음과 같습니다.
-
A → B → D → E → C → F → G
public void preorder(Node node) {
if (node == null) {
return;
}
log.info("data: {}", node.getData());
preorder(node.getLeft());
preorder(node.getRight());
}
중위순회 (Inorder Traversal)
-
중위 순회는 이진 탐색트리에서 오름차순 또는 내림차순으로 값을 가져올 때 사용됩니다.
-
중위 순회는 다음과 같은 방법으로 진행합니다.
- 왼쪽 서브 트리를 중위 순회한다.
- Root 노드를 방문한다.
- 오른쪽 서브 트리를 중위 순회한다.
-
위 트리의 중위 순회 결과는 다음과 같습니다.
-
D → B → E → A → F → C → G
public void inorder(Node node) {
if (node == null) {
return;
}
inorder(node.getLeft());
log.info("data: {}", node.getData());
inorder(node.getRight());
}
후위 순회 (Postorder traversal)
-
후위 순회는 트리를 삭제하는데 주로 사용됩니다.
-
이유는 부모노드를 삭제하기 전에 자식 노드를 삭제하는 순으로 노드를 삭제해야 하기 때문입니다.
-
후위 순회는 다음과 같은 방법으로 진행합니다.
- 왼쪽 서브트리를 후위 순회한다.
- 오른쪽 서브트리를 후위 순회한다.
- Root 노드를 방문한다.
-
위 트리에 중위 순회 결과는 다음과 같습니다.
-
D → E → B → F → G → C → A
public void postorder(Node node) {
if (node == null) {
return;
}
postorder(node.getLeft());
postorder(node.getRight());
log.info("data: {}", node.getData());
}
- Q3. 질문 (@발표자이름)