ํฐ์คํ ๋ฆฌ ๋ทฐ
์ด์งํธ๋ฆฌ์ ์ํ (Traversal) - ๋์ด ์ฐ์ ์ํ (BFT)
yeahajeong 2020. 6. 26. 16:46๋์ด ์ฐ์ ์ํ (Breadth First Traversal)
- ์์ค(level)์ด ๋ฎ์ ๋ ธ๋๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธ
- ๊ฐ์ ์์ค์ ๋ ธ๋๋ค ์ฌ์ด์์๋ ๋ถ๋ชจ ๋ ธ๋์ ๋ฐฉ๋ฌธ ์์์ ๋ฐ๋ผ ๋ฐฉ๋ฌธ, ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ ์ค๋ฅธ์ชฝ ์์๋ณด๋ค ๋จผ์ ๋ฐฉ๋ฌธ
- ํ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ ๋, ๋์ค์ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ค์ ์์๋๋ก ๊ธฐ๋กํด ๋์ด์ผ ํจ
๋ ธ๋์ ์์ค์ ๋ฐ๋ผ ์์๋ฅผ ์ ํ์ฌ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํ๋ ์ํ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ํ๋์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ ๋ ๋์ค์ ๊ทธ ๋ ธ๋์ ์์ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํ๊ธฐ๋ก ํด ๋๊ณ ๊ฐ์ ์์ค์ ์๋ ๋ค๋ฅธ ๋ ธ๋๋ค(์ง์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ง๊ณ ) ์ ์ฐ์ ๋ฐฉ๋ฌธํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ท์ ์ธ ์ฑ์ง์ ๊ฐ์ง ์๋๋ค.
๋์ค์ ๋ค์ ๋ฐฉ๋ฌธํ๊ธฐ๋ก ํ๊ณ ๊ทธ ์์๋ฅผ ๊ธฐ์ตํด๋์! ์ ์ ํฉํ ์๋ฃ๊ตฌ์กฐ๋ ํ๊ฐ ์๋ค. ๋จผ์ ๋ฃ์ ์์๊ฐ ๋จผ์ ๋์ค๋ ์ ์ ์ ์ถ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํ๋ ์ด๋ฌํ ์ข ๋ฅ์ ์์ฉ์ ์ ํฉํ๋ค.
๋์ด ์ฐ์ ์ํ ํ๋ฆ ์ค๊ณ
๋์ด ์ฐ์ ์ํ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
- traversal์๋ ๋น ๋ฆฌ์คํธ๋ฅผ ์ด๊ธฐํ, q์๋ ๋น ํ๋ฅผ ์ด๊ธฐํํ๋ค.
- ๋น ํธ๋ฆฌ๊ฐ ์๋๋ฉด, root node๋ฅผ ํ์ ์ถ๊ฐ(enqueue)ํ๋ค.
- q๊ฐ ๋น์ด์์ง ์๋ ๋์ q์ ์์๋ฅผ ์ถ์ถํ์ฌ(dequeue) node์ ์ ์ฅํ๋ค
- node๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ (traversal์ append)ํ๋ค.
- node์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๊ฐ ์์ผ๋ฉด q์ ์ถ๊ฐํ๋ค.
- q๊ฐ ๋นํ๊ฐ ๋๋ฉด ๋ชจ๋ ๋ ธ๋ ๋ฐฉ๋ฌธ ์๋ฃ๋์์ผ๋ฏ๋ก traversal์ ๋ฆฌํดํ๋ค.
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 = []
# ๋น ํ ์ด๊ธฐํ
visitQueue = ArrayQueue()
# ๋น ํธ๋ฆฌ๊ฐ ์๋๋ฉด ๋ฃจํธ ๋
ธ๋๊ฐ ์๋ ๊ฒ -> ํ์ ๋ฃจํธ ๋
ธ๋๋ฅผ ์ธํ
if self.root:
visitQueue.enqueue(self.root)
# ํ๊ฐ ๋น์ด์์ง ์๋ ๋์ ๋ฐ๋ณต
while visitQueue.isEmpty()==False:
# ํ์์ ๊บผ๋ด์ node์ ์ ์ฅ
node = visitQueue.dequeue()
# ๊บผ๋ธ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ๋ฆฌ์คํธ์ ์ ์ฅ
traversal.append(node.data)
# ๋
ธ๋์ ์ผ์ชฝ ์์ ๋
ธ๋๊ฐ ์กด์ฌํ๋๊ฒฝ์ฐ ํ์ ์ ์ฅ
if node.left:
visitQueue.enqueue(node.left)
# ๋
ธ๋์ ์ค๋ฅธ์ชฝ ์์ ๋
ธ๋๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํ์ ์ ์ฅ
if node.right:
visitQueue.enqueue(node.right)
return traversal
def solution(x):
return 0
'(๊ตฌ)์๋ฃ๊ตฌ์กฐ&์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ (Heaps) (0) | 2020.06.29 |
---|---|
์ด์ง ํ์ ํธ๋ฆฌ (Binary Search Trees) (0) | 2020.06.27 |
์ด์งํธ๋ฆฌ์ ์ํ (Traversal) - ๊น์ด ์ฐ์ ์ํ (DFT) (0) | 2020.06.25 |
์ด์งํธ๋ฆฌ (Binary Trees) (0) | 2020.06.25 |
ํธ๋ฆฌ (Trees) (0) | 2020.06.25 |
- Total
- Today
- Yesterday
- typeAliases
- ์๋ฃ๊ตฌ์กฐ
- ์ ์ฒด๊ฒ์๋ฌผ ์กฐํ
- ๊ฐ๋ฐ
- ๊ฒ์๋ฌผ ์ญ์
- ์จ๋ฆฌ์์ค
- ๋ถํธ ์๋์์ฑ
- ์๋ฐ
- tomcat์ค์น
- ๊ฒ์ํ ์ญ์
- ์คํ๋ง๋ถํธ ์๋์์ฑ
- ์ดํด๋ฆฝ์ค ์ค์น
- mysql์ค์น
- ๊ฐ๋ฐํ๊ฒฝ๊ตฌ์ถ
- ๊ฒ์ํ๋ง๋ค๊ธฐ
- java jdk ์ค์น
- java ํ๊ฒฝ๋ณ์
- ์ดํด๋ฆฝ์ค ํ๊ธ ์ธ์ฝ๋ฉ
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฒ์๋ฌผ์กฐํ
- ๋ณ๋ช ์ฒ๋ฆฌ
- Java
- Algorithm
- ๊ฒ์ํ ์กฐํ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |