책은 파이썬이지만 c 언어 병행해서 공부하기
- 9/1부터 6주차로 진행하는 스터디를 정리한 것이다.
- 코딩테스트 합격자 되기 - 파이썬편 책 소개
- 인프런 동영상 링크
1주차 시간복잡도 ✅
2주차 스택 ✅
3주차 큐 ✅
4주차 해시 ✅
5주차 트리 ✅
6주차 집합

(출처: 나무위키)
순회: 데이터가 있을 때 그 데이터를 빠짐없이 방문하는 방법
🔹전위 순회(preoder): 현재 노드를 부모 노드로 생각했을 때,
부모노드 → 왼쪽 자식 노드 → 오른쪽 자식 노드 순서로 방문. 트리를 복사할 때 많이 사용
🔹중위 순회(inoder): 현재 노드를 부모 노드로 생각했을 때,
왼쪽 자식 노드 → 부모노드 → 오른쪽 자식 노드 순서로 방문. 이진 탐색 트리에서 정렬된 순서대로 값을 가져올 때 사용.
🔹후위 순회(postoder): 현재 노드를 부모 노드로 생각했을 때
왼쪽 자식 노드 → 오른쪽 자식 노드 → 부모노드 순서로 방문. 트리 삭제에 자주 활용.
균형 이진 탐색 트리(balanced binary search tree)
- AVL 트리 https://en.wikipedia.org/wiki/AVL_tree
(출처: AVL tree - wikipedia)
레드 블랙 트리 https://en.wikipedia.org/wiki/Red%E2%80%93black_tree
🔹배열 탐색과 비교하면, 데이터 크기에 따라 하위 데이터 중 한 방향을 검색 대상에서 제외하므로 검색이 빠르다.
🔹시간 복잡도:
아래와 같은 이진 트리가 주어졌을 때, 세 가지 순회 방식(전위, 중위, 후위)의 결과를 각각 작성하세요. 또한, 각 순회 방식이 어떤 경우에 유용하게 사용될 수 있는지 그 특징과 실제 활용 예시를 한 가지 이상 들어 설명하세요.
1) A를 루트로, 왼쪽 자식 B, 오른쪽 자식 C
2) B의 왼쪽 자식 D, 오른쪽 자식 E
3) C의 오른쪽 자식 F

이진 탐색 트리(BST)는 평균적으로 O(log n)의 빠른 시간 복잡도로 탐색, 삽입, 삭제가 가능하지만, 최악의 경우 O(n)까지 성능이 저하될 수 있습니다.

# Python implementation of above approach
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
# Function to insert nodes on the right side of
# current node
def insert(root, data):
if root is None:
root = Node(data)
else:
root.right = insert(root.right, data) # 왼쪽으로 치우친 경우는 root.left
return root
# Function to print tree
def printTree(node):
if node is not None:
print(node.data)
printTree(node.right) # 왼쪽으로 치우친 경우는 node.left
# Driver code
root = None
root = insert(root, 1)
insert(root, 2)
insert(root, 3)
insert(root, 4)
insert(root, 5)
# Function call
printTree(root)
출처: geeksforgeeks
실시간으로 발생하는 이벤트 로그를 타임스탬프 순서대로 저장하고 검색하는 시스템을 구축한다고 가정해 봅시다. 이는 이미 정렬된 데이터가 순차적으로 계속해서 들어오는 상황과 같습니다.
만약 이 데이터를 타임스탬프를 키(key)로 사용하여 일반적인 이진 탐색 트리(BST)에 삽입한다면 어떤 문제가 발생할까요? 아래 질문에 따라 단계적으로 서술하세요.