티스토리 뷰
'어서와! 자료구조와 알고리즘은 처음이지?'
이진트리의 넓이 우선 순회(BFS; Breadth First Traversal)
원칙
✔ 수준(level)이 낮은 노드를 우선으로 방문
✔ 같은 수준의 노드들 사이에서는 부모 노드의 방문 순서에 따라 방문
✔ 왼쪽 자식 노드를 오른 쪽 자식 노드보다 먼저 방문
✔ 한 노드를 방문했을 때, 나중에 방문할 노드들을 순서대로 기록(방문한 노드의 자식 노드 기록)
✔ 큐(Queue) 이용
→ 순회 결과: A - B - C - D - E - F - G - H - J
알고리즘 설계
1. traversal 빈 리스트 초기화
2. 빈 트리가 아니면(root != None) root node를 큐에 추가(enqueue)
3. q 가 비어있지 않는 동안,
3.1 node ← q 에서 원소를 추출(dequeue)
3.2 node를 방문
3.3 node의 왼쪽, 오른쪽 자식 노드가 존재하는 경우 q에 추가(왼쪽 자식 노드 부터 추가)
[ 문1. 이진트리의 넓이 우선 순회 ]
class ArrayQueue:
def __init__(self):
self.data = []
def size(self):
return len(self.data)
def isEmpty(self):
return self.size() == 0
def enqueue(self, item):
self.data.append(item)
def dequeue(self):
return self.data.pop(0)
def peek(self):
return self.data[0]
class Node:
def __init__(self, item):
self.data = item
self.left = None
self.right = None
class BinaryTree:
def __init__(self, r):
self.root = r
def bft(self):
# 빈 리스트 초기화
traversal = []
# 큐 초기화
q = ArrayQueue()
# 루트 노드가 존재하는 경우
if self.root:
q.enqueue(self.root)
# q가 비어있지 않는동안 반복해서 순회
while q.size():
element = q.dequeue()
traversal.append(element.data)
if element.left:
q.enqueue(element.left)
if element.right:
q.enqueue(element.right)
return traversal
def solution(x):
return 0
'Algorithm > 알고리즘' 카테고리의 다른 글
[프로그래머스 강의] 21강 이진탐색트리(Binary Search Tree)(2) (0) | 2022.07.17 |
---|---|
[프로그래머스 강의] 20강 이진탐색트리(1) (0) | 2022.06.29 |
[프로그래머스 강의] 18강 이진 트리(Binary Tree) (0) | 2022.05.17 |
[프로그래머스 강의] 17강 트리 (0) | 2022.05.13 |
[프로그래머스 강의] 16강 우선순위 큐 (0) | 2022.05.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래머스강의
- 자바
- 리스트2
- 스터디
- 알고리즘
- 리스트 복사
- https
- 코드업 기초
- 네트워크
- It
- 보험
- SW
- 자료구조
- 프로세스 주소공간
- CS
- 연결리스트활용
- 정렬
- CS.
- 리스트함축
- 프로그래머스
- 완전탐색
- 이차 리스트
- 데이터베이스
- Greedy sort
- 리스트
- 자료구조와알고리즘 23강
- CS 스터디
- 이진탐색
- 운영체제
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함