๐ ์ด์ง ํธ๋ฆฌ (binary Search tree)
๐ต ์ด์ง ํ์ ํธ๋ฆฌ ํด๋์ค ์ ์ ๋ฐ ์ด๊ธฐํ
๋จผ์ Node ํด๋์ค๋ฅผ ์ ์ํด ๋ณด์. Node ํด๋์ค๋ ๋ ธ๋๊ฐ์ธ self.val ์ ์ผ์ชฝ ๋ ธ๋ self.left ์ค๋ฅธ์ชฝ ๋ ธ๋ self.right ์ ์์ฑ์ ๊ฐ์ง๋ค. ์ด๊ธฐํ ์ Node๊ฐ๋ง ์ฃผ์ด์ง๊ณ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ๋ ธ๋๋ ๋น์ด์๋ค.
- ๋ ธ๋ ๊ตฌ์ฑ
# ๋
ธ๋ ๋ง๋ค๊ธฐ
# A(val)
# / \
# B(left) C(right)
class Node:
def __init__(self, item):
self.val = item
self.left = None
self.right = None
Node ํด๋์ค๋ฅผ ๋ง๋ค์๋ค๋ฉด, BinaryTree ๋ฅผ ๋ง๋ค์ด๋ณด์. ์ฒ์์๋ Node์ ๊ฐ์ด ์๋, ๋ ธ๋ ํ๋๋ฅผ ๊ฐ์ง ํธ๋ฆฌ๋ก ์ด๊ธฐํํ๋ค.
- ํธ๋ฆฌ ๊ตฌ์ฑ
class BinaryTree:
# ์ด๊ธฐ๊ฐ head๋ None
def __init__(self):
self.head = Node(None)
self.preorder_list=[]
self.inorder_list=[]
self.postorder_list=[]
์ด์ ์ฌ๊ธฐ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ , ํ์ํ ์ ์๋๋ก ๋ฉ์๋๋ฅผ ์ ์ ์ฃผ์ด์ผ ํ๋ค.
๐ต ์ถ๊ฐ / add
๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋๋ ์ฌ๊ท๋ฅผ ์ด์ฉํด์ ๊ตฌํํ๋ฉด ๋๋ค. item ๊ฐ์ ์ถ๊ฐํ์ ๋ ๋ ธ๋์ ๊ฐ์ด None ์ด๋ผ๋ฉด ๋ ธ๋์ ๊ฐ์ item ์ผ๋ก ํ๋ค. ๋ ธ๋์ ๊ฐ์ด ์๋ค๋ฉด ๋์ ๋น๊ต๋ฅผ ํตํด ๋ ธ๋์ ์ผ์ชฝ์ผ๋ก ๊ฐ ๊ฒ์ธ์ง, ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ ๊ฒ์ธ์ง ๊ฒฐ์ ํ๋ฉฐ, ์ฌ๊ท์ ์ผ๋ก ๋์ ๋๋ฌํ์ฌ ๊ฐ์ ์ถ๊ฐํ๊ฒ ๋๋ค.
class BinaryTree:
# ์ด๊ธฐ๊ฐ head๋ None
def __init__(self):...
# ๊ฐ ์ถ๊ฐํ๊ธฐ head๊ฐ ์์ ๊ฒฝ์ฐ
def add(self, item):
if self.head.val is None:
self.head.val = item
# head๊ฐ ์์ผ๋ฉด ์ผ์ชฝ๋ฐฐ์น or ์ค๋ฅธ์ชฝ๋ฐฐ์น
else:
self.__add_node(self.head, item)
# head๊ฐ ์๋ ๊ฒฝ์ฐ
def __add_node(self, cur, item):
print('๋ถ๋ชจ:', cur.val, '์์:', item)
# head ๊ฐ์ด ํฌ๋ฉด ์ผ์ชฝ์ผ๋ก
if cur.val >= item:
if cur.left is not None:
self.__add_node(cur.left, item)
else:
cur.left = Node(item)
# head ๊ฐ์ด ์์ผ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก
else:
if cur.right is not None:
self.__add_node(cur.right, item)
else:
cur.right = Node(item)
'CS > Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ(Stack) (0) | 2020.11.04 |
---|---|
[python] ์ด์ง ํ์ ํธ๋ฆฌ (binary Search tree) - 4. ์ญ์ (0) | 2020.09.05 |
[python] ์ด์ง ํ์ ํธ๋ฆฌ (binary Search tree) - 3. ์ํ (0) | 2020.09.04 |
[python] ์ด์ง ํ์ ํธ๋ฆฌ (binary Search tree) - 2. ํ์ (0) | 2020.09.03 |
[python] ์ด์ง ํธ๋ฆฌ (binary tree) - ๊ฐ๋ ์ ๋ฆฌ (0) | 2020.09.01 |