๐Ÿ’พ searching, recursion, tree

Lana Chungยท2021๋…„ 6์›” 10์ผ
0

algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
3/4

์˜ค๋Š˜ ๋ฐฐ์šธ ๊ฒƒ โœ๏ธ

  • ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ™œ์šฉ ๋ฐฉ๋ฒ•
    1) ๊ฒ€์ƒ‰๊ณผ ์žฌ๊ท€
    2) ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…

Searching

  • ํŠน์ • ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ฒ€์ƒ‰์ด ์šฐ์„ ๋˜์•ผ ํ•œ๋‹ค (์„ ํ–‰)
  • ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฒฝ๋กœ๋ฅผ ์ธก์ •ํ•˜๋Š”๋ฐ ์“ฐ์ธ๋‹ค
  • ๊ฒ€์ƒ‰ํ•˜๋Š” ์ปฌ๋ ‰์…˜์ด ๋ฌด์ž‘์œ„์ ์ด๊ณ  ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์„ ํ˜• ๊ฒ€์ƒ‰์ด ๊ธฐ๋ณธ์ ์ธ ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•์ž„
# ํ•˜๋‚˜์˜ ๋ฐ˜๋ณต๋ฌธ๊ณผ ๋ฆฌ์ŠคํŠธ(์ž๋ฃŒ๊ตฌ์กฐ)์˜ ์ธ๋ฑ์Šค, ์กฐ๊ฑด๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ํŠน์ •๊ฐ’์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
def linear_search(arr, target):
	
    for idx in range(len(arr)):
    	if arr[idx] == target
        	return idx
    # ์ „์ฒด ๋ฐฐ์—ด์„ ๋‹ค ๋Œ์•˜๋‹ค
    return -1

Recursion

  • ์ž๊ธฐ ์ž์‹ ์„ ์žฌํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ
  • ์žฌ๊ท€์˜ ๊ฐœ๋…์€ ์ˆ˜ํ•™์  ์‚ฌ๊ณ ์— ๊ธฐ๋ฐ˜ํ•˜๊ณ , ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์žฌํ˜ธ์ถœ ๋กœ์ง์„ ๋ฐœ๊ฒฌํ•ด์•ผ ํ•œ๋‹ค.
  • ์ˆ˜ํ•™ ๊ณต๋ถ€๋ฅผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ง์ ‘ ์†์œผ๋กœ ํ’€์–ด๋ณด์ž.
  • ์žฌ๊ท€ ํ˜ธ์ถœ์€ ์Šคํƒ์˜ ๊ฐœ๋…์ด ์ ์šฉ๋˜๋ฉฐ, ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๋Š” ์Šคํƒ์ฒ˜๋Ÿผ ๊ด€๋ฆฌ๋œ๋‹ค (ํ›„์ž…์„ ์ถœ)(Last Input First Out)
  • ์žฌ๊ท€๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•?
    - ํ•˜์œ„ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๋–„๊นŒ์ง€ ๋ฌธ์ œ๋ฅผ ๋” ์ž‘์€ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ๊ธฐ
    • ๋ถ„ํ•  ์ •๋ณต๋ฒ• : ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋ฅผ ๋ถ„ํ• ํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ•˜๊ณ  ํ•ด๊ฒฐ ํ›„ ํ•˜๋‚˜๋กœ ๋‹ค์‹œ ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•
  • ์˜ˆ์‹œ
def counter(num):
	# ๋ฉˆ์ถ”๋Š” ์กฐ๊ฑด
	if num == 1:
		return 1
	# 1์ด ๋ ๋•Œ๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ๋”ํ•ด์ฃผ๊ธฐ
    	# num ๋ถ€ํ„ฐ 1๊นŒ์ง€ ํ•œ๋ฒˆ์”ฉ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๊ฑฐ๊พธ๋กœ ๋Œ๋ฆฌ๊ธฐ
	else:
		return num + counter(num-1)

์žฌ๊ท€์˜ ์กฐ๊ฑด

  1. base case (๊ธฐ๋ณธ ์ผ€์ด์Šค ๋˜๋Š” ์กฐ๊ฑด) ์ด ์žˆ์–ด์•ผ ํ•จ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฐ˜๋ณต์„ ์ค‘์ง€ํ•˜๋„๋ก ํ•˜๋Š” ์กฐ๊ฑด
    ex) sum(num) num๊นŒ์ง€ ๋‹ค ๋”ํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, num์˜ ๊ฐ’์ด 1์ด๋ฉด ๋ฉˆ์ถ˜๋‹ค (return 1)
  1. ์ถ”๊ฐ€ ์กฐ๊ฑด๊ณผ ๊ธฐ๋ณธ ์ผ€์ด์Šค์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • ๋กœ์ง์˜ ์ฐจ์ด
  • ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๊ธฐ๋ณธ ์ผ€์ด์Šค ๊ฐ’์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค
  • ๋ฐ˜๋ณต์„ ์ค‘์ง€ํ•˜๋Š” ์กฐ๊ฑด ์™ธ ๋‚˜๋จธ์ง€ ์กฐ๊ฑด๋“ค
    ex) num = num - 1
  1. ๋ฐ˜๋“œ์‹œ ์ž๊ธฐ ์ž์‹ (ํ•จ์ˆ˜)๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค
  • ํ•จ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ค„์—์„œ ์žฌ๊ท€์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค (๊ผญ ์•„๋‹์ˆ˜๋„ ์žˆ์ง€๋งŒ)

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜ (์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•)

  1. base case : ๋‘˜ ์ค‘ ์ž‘์€ ์ˆ˜๊ฐ€ ํฐ ์ˆ˜๋กœ ๋‚˜๋ˆ ์ง„๋‹ค๋ฉด ๋ฉˆ์ถ˜๋‹ค
  • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ : ๋‘ ์ˆ˜๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜
  • x > y ์ผ๋•Œ x % y = 0 ์ด๋ผ๋ฉด y๊ฐ€ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜
  1. ์ถ”๊ฐ€ ์กฐ๊ฑด
  • x % y != 0 ์ด๋ผ๋ฉด y, x%y (x๋ฅผ y๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€)๊ฐ€ ๋‚˜๋ˆ ์ง€๋Š”์ง€ ํ™•์ธ
  • x % y๊ฐ€ 0์ด ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
  1. ์ž๊ธฐ ์ž์‹  ํ˜ธ์ถœ
  • return gcd(x, x%y)

Tree

์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์ค‘์š” ๊ฐœ๋…

  1. root ๋ฟŒ๋ฆฌ ๋…ธ๋“œ
  • ๊ฐ€์žฅ ์œ„์ชฝ์— ์žˆ๋Š” ๋…ธ๋“œ๋กœ, ํŠธ๋ฆฌ๋ณ„ ํ•˜๋‚˜๋งŒ ์žˆ์Œ
  • ๋ฃจํŠธ์™€ ๋ถ€๋ชจ๋Š” ๋‹ค๋ฆ„. ๋ถ€๋ชจ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ 1๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ
  1. sub tree ์„œ๋ธŒ ํŠธ๋ฆฌ
  • ์ž์‹ ๋…ธ๋“œ์ด๋ฉด์„œ ๋ถ€๋ชจ ๋…ธ๋“œ ์—ญํ• ์„ ํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ.
  • ์ „์ฒด ํŠธ๋ฆฌ ์•ˆ์— ์„œ๋ธŒ ํŠธ๋ฆฌ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ
  1. ์ฐจ์ˆ˜
  • ๋…ธ๋“œ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ์ตœ๋Œ€ ์ž์‹ ๋…ธ๋“œ ์ˆ˜
  • ์œ„์˜ ๊ฒฝ์šฐ ์ฐจ์ˆ˜๋Š” 3๊ฐœ
    - 1์˜ ์ฐจ์ˆ˜(3), 3์˜ ์ฐจ์ˆ˜(2)
  1. leaf ๋ฆฌํ”„ ๋…ธ๋“œ
  • ๋ ˆ๋ฒจ๋ณ„๋กœ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ๋…ธ๋“œ
  • ๋‹จ๋ง๋…ธ๋“œ(terminal node), ์™ธ๋ถ€๋…ธ๋“œ(external node)
  • ๋ฆฌํ”„๋Š” ํŠธ๋ฆฌ๋ณ„๋กœ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค
  1. ๋ ˆ๋ฒจ
  • ๋ฃจํŠธ๋…ธ๋“œ์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ์žˆ๋Š”์ง€ ๊ฐ๊ฐ ๋‚˜ํƒ€๋ƒ„ (๊ณ„์ธต)
  • root node level : 0
  • ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐˆ๋•Œ๋งˆ๋‹ค +1 (0, 1, 2)
  1. ๋†’์ด
  • ๋ฃจํŠธ์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋ฆฌํ”„๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ (๋ ˆ๋ฒจ๊ณผ ๋‹ฌ๋ฆฌ ๊ฐ’ ํ•˜๋‚˜)
  • ๋ฆฌํ”„ ๋ ˆ๋ฒจ์˜ ์ตœ๋Œ€๊ฐ’ (2)
  1. sibling ํ˜•์ œ ๋…ธ๋“œ
  • ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์€ ๋…ธ๋“œ

Binary Tree

  • ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ๋ณ„๋กœ ์ตœ๋Œ€ 2๊ฐœ์˜ ์„œ๋ธŒ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š” ํŠธ๋ฆฌ (์ฐจ์ˆ˜ ์ตœ๋Œ€ 2) (left, right)
  • ์กฐ๊ฑด
  1. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๋กœ ๋‚˜๋ˆ ์ง„๋‹ค
  2. ๋‚˜๋ˆ ์ง„ ๋‘ ์„œ๋ธŒํŠธ๋ฆฌ๋„ ๊ฐ๊ฐ ๋‘ ๊ฐœ์˜ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๊ฐ–๋Š”๋‹ค.
  3. ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์„ ํ•„์š”๋Š” ์—†๋‹ค. (==๋…ธ๋“œ๊ฐ€ ์—†๋Š” ์ƒํƒœ)

    -> ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋„ ์ด๋ ‡๊ฒŒ ์žˆ์Šด
# ๊ธฐ๋ณธ ์ฝ”๋“œ
# ์ด์ง„ํŠธ๋ฆฌ ๋…ธ๋“œ ์ƒ์„ฑ

class BinaryTreeNode:
	def __init__(self, value):
    	self.left = None #์™ผ์ชฝ ์„œ๋ธŒ ๋…ธ๋“œ
        self.value = value #ํ•ด๋‹น ๋…ธ๋“œ ๊ฐ’
        self.right = None #์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ๋…ธ๋“œ

ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ


๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ๋“ค์ด ๋™์ผํ•œ ๋ ˆ๋ฒจ์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ (0,1,2,3)

์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ


์œ„์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ 3๋ ˆ๋ฒจ์—์„œ ์„œ๋ธŒ ๋…ธ๋“œ ๋ช‡๊ฐœ๊ฐ€ ๋น ์กŒ๋‹ค

  • ๋…ธ๋“œ๊ฐ€ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ฑ„์›Œ์ ธ์žˆ๋‹ค (๋น ์ง€๋”๋ผ๋„ ๊ฐ€์žฅ ์•„๋ž˜๋ถ€ํ„ฐ ๋น ์ง)
  • ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ์ˆœ์„œ๋Œ€๋กœ ์ฑ„์›Œ์ ธ์žˆ๋‹ค (๋น ์ง€๋”๋ผ๋„ ์˜ค๋ฅธ์ชฝ ๋ถ€ํ„ฐ ๋น ์ง)

์ด์ง„ํŠธ๋ฆฌ์ค‘ ๋งŽ์ด ์“ฐ์ด๋Š” ํŠธ๋ฆฌ..

Binary Search Tree (BST ใ„ทใ„ท)

์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ

  • ๋…ธ๋“œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ •๋ ฌํ•˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ ์œ ํ˜•
  • ๋ชฉ์  ์ž์ฒด๊ฐ€ ๊ฒ€์ƒ‰ (์ตœ์ข… ๋ชฉ์  - ๋…ธ๋“œ ์ •๋ ฌ)

๊ฐ’ ํฌ๊ธฐ ์กฐ๊ฑด

  • ์™ผ์ชฝ ์„œ๋ธŒ๋…ธ๋“œ์˜ ๊ฐ’ (left child) < ๋ฃจํŠธ(๋ถ€๋ชจ)๋…ธ๋“œ์˜ ๊ฐ’(root) < ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ๋…ธ๋“œ์˜ ๊ฐ’(right child)

  • ์ค‘๋ณต๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค

  • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’์€ ๋ฃจํŠธ ๊ฐ’๋ณด๋‹ค ์ž‘์•„์•ผ ํ•จ

  • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’์€ ๋ฃจํŠธ ๊ฐ’๋ณด๋‹ค ์ปค์•ผ ํ•จ

์œ„์— ๋Œ€ํ•œ ๊ทœ์น™์ด ์ •ํ•ด์ง„ ์ด์œ 

  • ์™ผ์ชฝ -> ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ
  • ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ธฐ๋ณธ์ด ๋˜๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ (์™ผ์ชฝ->์˜ค๋ฅธ์ชฝ)
    (์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐœ์„ ํ•ด์„œ ๋งŒ๋“  ์ž๋ฃŒ๊ตฌ์กฐ)

    ์œ„์˜ ์‚ฌ์ง„์˜ ๊ฒฝ์šฐ 1 -> 2 -> 4 -> 5 -> 6 -> 7 ์‹์œผ๋กœ ๊ฒ€์ƒ‰ํ•จ (???)

    ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•
    4๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ 6๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ ๋ถ€ํ„ฐ ๊ฒ€์ƒ‰
    4๊ฐ€ 2๋ณด๋‹ค ํฌ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ ๊ฒ€์ƒ‰
    4๊ฐ€ 5๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ ๊ฒ€์ƒ‰
    4 ๊ฒ€์ƒ‰ ์„ฑ๊ณต

๊ฒ€์ƒ‰ ์‹คํŒจ์˜ ๊ฒฝ์šฐ, 8์ด 6๋ณด๋‹ค ํฌ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ ๊ฒ€์ƒ‰
8์ด 7๋ณด๋‹ค ํฌ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ ๊ฒ€์ƒ‰ -> ๋…ธ๋“œ ์—†์Œ -> ๊ฒ€์ƒ‰ ์‹คํŒจ

ํŠน์ง•

  • ์œ„์™€ ๊ฐ™์€ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•จ (๊ฐ’์— ๋”ฐ๋ผ ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ์ •ํ•ด์ง)
  • ๊ฒ€์ƒ‰ํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๋…ธ๋“œ ๊ฐ’์„ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์–ป๋Š”๋‹ค (์ค‘๋ณต๊ฐ’ ์—†์Œ)
  • ์ •๋ ฌ๋˜์–ด ์žˆ์œผ๋‹ˆ ๊ฒ€์ƒ‰์ด ์‰ฝ๋‹ค. ๊ทธ๋ž˜์„œ ๋…ธ๋“œ ์‚ฝ์ž…๋„ ์‰ฝ๋‹ค.

์†Œ์Šค์ฝ”๋“œ

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 # root node
        
    	def insert_node(self, value):
    		self.base_node = self.head # ํ—ค๋“œ๋ฅผ root node๋กœ ์„ค์ •
        	while True: 
        		if value < self.base_node.value: # root ๊ฐ’์ด ์‚ฝ์ž…ํ•  ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด
            			if self.base_node.left == None : # ๊ทธ๋ฆฌ๊ณ  ์™ผ์ชฝ ๋…ธ๋“œ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด
        				self.base_node.left = node(value) # ํ•ด๋‹น ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋…ธ๋“œ ์ƒ์„ฑ
                    			break # ๊ทธ๋ฆฌ๊ณ  while๋ฌธ ๋๋‚ด๊ธฐ (์‚ฝ์ž… ํ–ˆ์œผ๋‹ˆ๊น)
                	else: # ๊ทผ๋ฐ ์•ˆ ๋น„์–ด์žˆ์œผ๋ฉด
                		self.base_node = self.base_node.left # ๋ฃจํŠธ๋ฅผ ๊ทธ ์•ˆ ๋น„์–ด์žˆ๋Š” ์™ผ์ชฝ ๋…ธ๋“œ๋กœ ๋‚ด๋ ค๊ฐ€๊ธฐ
                		#๊ทธ๋ฆฌ๊ณ  while True์ด๋ฏ€๋กœ break ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
         		else: # root ๊ฐ’์ด ์‚ฝ์ž…ํ•  ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด
            		if self.base_node.right == None:
                		self.base_node.right = node(value)
                    		break
                	else:
                		self.base_node = self.base_node.right
                        
                        
       	def search_node(self, value):
        	self.base_node = self.head
            
            while self.base_node: # root ๋…ธ๋“œ ๊ฐ’์ด ์žˆ์„๋•Œ๊นŒ์ง€
            	if self.base_node.value == value:
                	return True
                else:
                	if self.base_node.value > value :
                    		self.base_node = self.base_node.left
                    	else:
                    		self.base_node = self.base_node.right
            return False
profile
๊ทธ๊ฒŒ ์‰ฌ์šด ์ผ์ด์—ˆ๋‹ค๋ฉด, ์•„๋ฌด๋Ÿฐ ์ฆ๊ฑฐ์›€๋„ ์–ป์„ ์ˆ˜ ์—†์—ˆ์„ ๊ฒƒ์ด๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€