Programmers TIL/Algorithm
[Algorithm] 이진 트리의 넓이 우선 순회(BFS)_TIL Day3-5
PTJ
2023. 4. 12. 21:32
이진 트리의 넓이 우선 순회
넓이 우선 순회(Breadth First Trabersal)
- 원칙
- 수준(level)이 낮은 노드를 우선으로 방문
- 같은 수준의 노드들 사이에는, 부모 노드의 방문 순서에 따라 방문, 왼쪽을 먼저 방문 - 한 노드를 방문했을 때, 나중에 방문할 노드(자식노드) 순서를 기록해 둬야 함 (큐를 이용해야 함)
넓이 우선 순회 알고리즘 구현해보기
- 알고리즘 순서
1. traversal에 빈 리스트, q에 빈 큐를 초기화
2. 빈 트리가 아니면, root node를 큐에 추가 (enqueue)
3. q가 비어 있지 않는 동안
3.1. q에서 원소를 추출 및 node에 저장 (dequeue)
3.2. node를 방문처리 (traversal에 append)
3.3. node의 왼쪽, 오른쪽 자식을 (존재할때) q에 추가
4. q가 빈 큐가 되면 모든 노드 방문 완료
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):
traverse = []
q = ArrayQueue()
if self.root:
q.enqueue(self.root)
while q.size() > 0:
el = q.dequeue()
traverse.append(el.data)
if el.left:
q.enqueue(el.left)
if el.right:
q.enqueue(el.right)
return traverse
def solution(x):
return 0