ํค์๋
- ๋น์ ํ ๊ตฌ์กฐ
- ์ด์งํธ๋ฆฌ
- ์ด์งํ์ํธ๋ฆฌ
- ํธํฅ์ด์งํธ๋ฆฌ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ
- ๋ฃจํธ(root) : ํธ๋ฆฌ์ ๊ฐ์ฅ ์์ชฝ์ ์๋ ๋ ธ๋, 1๊ฐ๋ง ์กด์ฌ
- ๋ฆฌํ(leaf) : ํธ๋ฆฌ์ ๊ฐ์ฅ ์๋ซ๋จ์ ์๋ ๋ ธ๋(๊ฐ์ฅ ๋์๋ฝ)
- ์๋ธํธ๋ฆฌ(sub tree) : ํฐ ํธ๋ฆฌ์์ ์์ ํธ๋ฆฌ๋ฅผ ์ชผ๊ฐ์ ๋ณด๋ ๊ฒ(์์๋ ธ๋์ด๋ฉด์ ๋ถ๋ชจ์ญํ ์ ํ๋ ๋ ธ๋๊ฐ ์๋ ํธ๋ฆฌ)
- ์ฐจ์ : ๋ ธ๋๊ฐ ๊ฐ๊ณ ์๋ ์ต๋ ์์ ๋ ธ๋ ์
- ๋ ๋ฒจ : ๋ฃจํธ ๋ ธ๋๋ฅผ 0์ผ๋ก, ์๋๋ก ํ๋จ๊ณ์ฉ +1
- ๋์ด : ์ ์ผ ๋๋จ ๋ ธ๋์ ๋ ๋ฒจ๊ณผ ๋ฃจํธ ๋ ธํธ ๋ ๋ฒจ์ ์ฐจ์ด
- ํ์ ๋ ธ๋(sibling) : ๋ถ๋ชจ๊ฐ ๊ฐ์ ๋ ธ๋
[ํธ๋ฆฌ] ์ด์งํธ๋ฆฌ
- ๊ฐ ๋ ธ๋ ๋ณ๋ก, ์ต๋ 2๊ฐ์ ์๋ธ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์(left์ right)
- ํธ๋ฆฌ ์ค ๊ฐ์ฅ ๊ธฐ๋ณธ์ด๋ฉด์ ๊ฐ์ฅ ๋ง์ด ํ์ฉ
- ํฌํ์ด์งํธ๋ฆฌ : ๋ชจ๋ ๋ฆฌํ๋ ธ๋๋ค์ด ๋์ผํ ๋ ๋ฒจ์ ๊ฐ๊ณ ์๋ ๊ฒฝ์ฐ(๋งจ ๋ง์ง๋ง ๋ ๋ฒจ์ ๋ชจ๋ ๋ฆฌํ๋ ธ๋๊ฐ ์ฐจ ์๋ ๊ฒฝ์ฐ)
- ์์ ์ด์งํธ๋ฆฌ : ๋ ธ๋๊ฐ ์ผ์ชฝ๋ถํฐ ์ฐจ ์๋ ์ด์งํธ๋ฆฌ
[ํธ๋ฆฌ] ์ด์งํ์ํธ๋ฆฌ
- ์ด์งํธ๋ฆฌ์ด์ง๋ง, ๋ฐ๋์ ๋ฐ๋์!!! ์์ ๊ฐ์ ์ผ์ชฝ์ ๋์ด์ผํ๋ค.(์์ฃผ ์ค์)
- ์์ ๊ฐ์ ์กฐ๊ฑด์
๊ฐ ํฌ๊ธฐ ์กฐ๊ฑด
์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์ด์งํ์ํธ๋ฆฌ๋ '์ค๋ฅธ์ชฝ ์๋ธ๋ ธ๋ ๊ฐ > ๋ถ๋ชจ ๋ ธ๋ ๊ฐ > ์ผ์ชฝ ์๋ธ๋ ธ๋ ๊ฐ'์ด ๋๋ค. - ๊ฐ ํฌ๊ธฐ ์กฐ๊ฑด์ ๋ง์กฑํ๊ธฐ ๋๋ฌธ์ ์๋ฃ๋ฅผ ํ์ ์ ๊ทธ๋ฅ ์ด์งํธ๋ฆฌ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ค.
์์)
# ๋
ธ๋ ํด๋์ค ์์ฑ(ํด๋น ํด๋์ค๋ ๊ฒ์์๊ณ ๋ฆฌ์ฆ์ ํ์ํ ๊ธฐ๋ณธํด๋์ค)
class node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
# ์ด์งํ์ํธ๋ฆฌ
class binary_search_tree:
def __init__(self, head):
self.head = head
# ์ด์งํ์ํธ๋ฆฌ์ ๋
ธ๋์ฝ์
ํจ์ ์ถ๊ฐ
def insert_node(self, value):
self.base_node = self.head
while True:
if value < self.base_node.value:
if self.base_node.left != None:
self.base_node = self.base_node.left
else:
self.base_node.left = node(value)
break
else:
if self.base_node.right != None:
self.base_node = self.base_node.right
else:
self.base_node.right = node(value)
break
# ์ด์งํ์ํธ๋ฆฌ์ ๋
ธ๋๊ฒ์ ํจ์ ์ถ๊ฐ
def search_node(self, value):
self.node = self.head
while True:
if value < self.node.value:
self.node = self.node.left
elif value > self.node.value:
self.node = self.node.right
else:
return True
return False
ํธํฅ์ด์งํธ๋ฆฌ : ๋ถ๋ชจ๋ ธ๋์ ๋ํด ๊ณ์ ์์ ๊ฐ๋ง ํน์ ๊ณ์ ํฐ ๊ฐ๋ง insertํ ๊ฒฝ์ฐ(์ผ๋ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋ค๋ฅผ ๊ฒ ์์ด์ง๋ค.)
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 100. [์๊ณ ๋ฆฌ์ฆ] ํ์ (0) | 2022.04.06 |
---|---|
[TIL] 99. [์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ (0) | 2022.04.06 |
[TIL] 97. ์ฌ๊ท(Recursion) (0) | 2022.04.05 |
[TIL] 96. ์ถ์ ์๋ฃํ(Abstract Data Type ; ADT) (0) | 2022.04.04 |
[TIL] 95. python ์๋ฃ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ (0) | 2022.03.31 |