Skip to content

Latest commit

ย 

History

History
179 lines (136 loc) ยท 6.01 KB

Tree.md

File metadata and controls

179 lines (136 loc) ยท 6.01 KB

๐ŸŒณ TreeํŠธ๋ฆฌ

Tree์˜ ๊ตฌ์กฐ, ์ •์˜ ๋ฐ ์šฉ์–ด

Binary Tree

Binary Tree์˜ ํŠน์ง•

Tree๋ž€?

ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋น„์„ ํ˜•์  ๊ตฌ์กฐ์ด๋‹ค. ํŠธ๋ฆฌ๊ฐ€ ๋˜๊ธฐ์œ„ํ•ด์„œ๋Š”

  1. ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” ์œ ์ผํ•˜๋‹ค.
  2. ์‚ฌ์ดํด(ํšŒ๋กœ)๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  3. ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
  4. edge:๊ฐ„์„ ์„ ํ•˜๋‚˜ ์ž๋ฅด๋ฉด ํŠธ๋ฆฌ๊ฐ€ ๋‘๊ฐœ๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค.
  5. ๊ฐ„์„ ์˜ ์ˆ˜|E|๋Š” |V|์—์„œ 1์„ ๋บ€ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ

ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ1

๐Ÿ‘† ์‚ฌ์ดํด์ด ์กด์žฌํ•จ.

ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ2

๐Ÿ‘† ์‚ฌ์ดํด ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒ 1์—์„œ 4๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ ์œ ์ผํ•˜์ง€ ์•Š์Œ

ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ3

๐Ÿ‘† ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์กด์žฌ.

Terms

Tree

๋…ธ๋“œ

  • ๋ฃจํŠธ ๋…ธ๋“œ :๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ, ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ๋…ธ๋“œ ๋งŒ์„ ๊ฐ€์ง„๋‹ค.

  • ๋‹จ๋ง ๋…ธ๋“œ :์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ. '๋ง๋‹จ ๋…ธ๋“œ(terminal)', '์žŽ ๋…ธ๋“œ(leaf)'

  • ๋‚ด๋ถ€ ๋…ธ๋“œ :๋‹จ๋ง ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ

  • ๋ถ€๋ชจ ๋…ธ๋“œ : ๋ฃจํŠธ ๋…ธ๋“œ ๋ฐฉํ–ฅ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ

  • ํ˜•์ œ ๋…ธ๋“œ:๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ

  • ์ž์‹ ๋…ธ๋“œ :๋กœํŠธ ๋…ธ๋“œ ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ

  • ๊ฐ„์„  :๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ 

๋…ธ๋“œ ๊ด€๋ จ

  • ๋…ธ๋“œ์˜ ํฌ๊ธฐ :์ž์‹ ์„ ํฌํ•จํ•œ ๋ชจ๋“  ์ž์† ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
  • ๊นŠ์ด :๋ฃจํŠธ์—์„œ ์–ด๋–ค ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ณ์•ผํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜
  • ๋ ˆ๋ฒจ :ํŠธ๋ฆฌ์˜ ํŠน์ • ๊นŠ์ด๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ
  • ์ฐจ์ˆ˜ :๊ฐ ๋…ธ๋“œ๊ฐ€ ์ง€๋‹Œ ์ž์‹์˜ ์ˆ˜

ํŠธ๋ฆฌ ๊ด€๋ จ

  • ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜ :ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜ (max(deg1, deg2, deg3))
  • ํŠธ๋ฆฌ์˜ ๋†’์ด :๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๊นŠ์ˆ™ํžˆ ์žˆ๋Š” ๋…ธ๋“œ์˜ ๊นŠ์ด



๐ŸŒฒ๐ŸŒฒ Binary Tree

์ด์ง„ํŠธ๋ฆฌ๋ž€ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ์ด๋‹ค.

  • ์ • ์ด์ง„ํŠธ๋ฆฌ(full binary tree)
  • ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ(complete binary tree)
  • ๊ท ํ˜• ์ด์ง„ํŠธ๋ฆฌ(balanced binary tree)


์ „ ์ด์ง„ ํŠธ๋ฆฌ(full)

full

  • ์ • ์ด์ง„ํŠธ๋ฆฌ๋Š” ์žŽ์ƒˆ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ž์‹๋…ธ๋“œ๋ฅผ 2๊ฐœ ๋˜๋Š” 0๊ฐœ ๊ฐ€์ง
  • ์ • ์ด์ง„ํŠธ๋ฆฌ์—์„œ ๋ ˆ๋ฒจ์— ๋”ฐ๋ฅธ ๋…ธ๋“œ์˜ ์ˆซ์ž๋Š” ์•„๋ž˜ ํ‘œ์™€ ๊ฐ™๋‹ค.

๋ ˆ๋ฒจ ๋…ธ๋“œ์ˆ˜
0 2^0
1 2^1
3 2^2
3 2^3
k 2^k

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

complete

  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ๋“ค์ด ๊ฝ‰ ์ฑ„์›Œ์ง„ ์ด์ง„ํŠธ๋ฆฌ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์™ผ์ชฝ ๋‹จ๋ง ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฑ„์›Œ์ ธ์•ผ ํ•œ๋‹ค.
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋Š” 1์ฐจ์› ๋ฐฐ์—ด๋กœ๋„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ

balance

  • ๋ชจ๋“  ์žŽ์ƒˆ ๋…ธ๋“œ์˜ ๊นŠ์ด ์ฐจ์ด๊ฐ€ ์ตœ๋Œ€ 1์ธ ํŠธ๋ฆฌ
  • ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊นŠ์ด๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋…ธ๋“œ๊ฐ€ n๊ฐœ์ธ ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋Š” log n์„ ๋‚ด๋ฆผํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
  • ํž™ ์ •๋ ฌ๊ณผ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋ฒ•์ด๋‹ค.

ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•œ ํŠธ๋ฆฌ

์ž๋ฃŒ ๊ตฌ์กฐ

class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
    def __str__(self):
        return str(self.data)
class Tree:
    def __init__(self):
        self.root = None

์ˆœํšŒ

์ž์‹ ์„ ๊ธฐ์ค€์œผ๋กœ ์ถœ๋ ฅ ์ˆœ์„œ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค. ์ „์œ„๋Š” ์ž์‹  ๋จผ์ €, ์ค‘์œ„๋Š” ๋‚ด๊ฐ€ ์ค‘๊ฐ„ ์ˆœ์„œ, ํ›„์œ„๋Š” ๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰ ์ˆœ์„œ์ž„.

  • ์ „์œ„ ์ˆœํšŒ
def preorder(self, node):
    print(node, end = '')
    if not node.left == None : self.preorder(node.left)
    if not node.right == None : self.preorder(node.right)

  • ์ค‘์œ„ ์ˆœํšŒ
def inorder(self, node):
    if not node.left == None : self.preorder(node.left)
    print(node, end = '')
    if not node.right == None : self.preorder(node.right)

  • ํ›„์œ„ ์ˆœํšŒ
def preorder(self, node):
    if not node.left == None : self.preorder(node.left)
    if not node.right == None : self.preorder(node.right)
    print(node, end = '')
  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ํ•˜๋ฉด ์ •๋ ฌ๋œ ๊ฒฐ๊ด„๋ฅด ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree/BST)

BST

  • ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ผ์ข…์œผ๋กœ ๋…ธ๋“œ ์™ผ์ชฝ์€ ์ž๊ธฐ ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๊ฐ’๋งŒ ๊ฐ€์ง€๊ณ , ์˜ค๋ฅธ์ชฝ์€ ์ž๊ธฐ ์ž์‹  ๋ณด๋‹ค ํฐ ๊ฐ’๋งŒ์„ ๊ฐ€์ง„๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด ์–ด๋–ค ๊ฐ’ n์„ ์ฐพ์„ ๋•Œ, ๋ฃจํŠธ ๋…ธ๋“œ์™€ ๋น„๊ตํ•ด์„œ n์ด ๋” ์ž‘๋‹ค๋ฉด ์˜ค๋ฅธ์ชฝ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ์ด์ƒ์ ์ธ ์ƒํ™ฉ์—์„œ ํƒ์ƒ‰/์‚ฝ์ž…/์‚ญ์ œ ๋ชจ๋‘ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(logn)์ด๋‹ค. ์ด์ƒ์ ์ธ ์ƒํ™ฉ = ๊ท ํ˜•์žก์ธ ์ด์ง„ ํŠธ๋ฆฌ

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ์ฐพ๋Š” ๊ณผ์ •

sequence


๐Ÿ“š ์ฐธ๊ณ 

ํŠธ๋ฆฌ์˜์„ฑ์งˆ

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

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


โ‰๏ธ QnA

  1. BST์™€ Binary tree์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.
  1. ์ค‘์œ„ ์ˆœํšŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์‹œ์˜ค.
  1. full binary tree์™€ complete binary ํŠธ๋ฆฌ์˜ ํŠน์ง•์„ ๋งํ•˜์‹œ์˜ค.
  1. ํŠธ๋ฆฌ์˜ ์ •์˜(์„ฑ์งˆ) ์ตœ์†Œ 3๊ฐ€์ง€๋ฅผ ๋งํ•˜์‹œ์˜ค.