Skip to content

Files

Latest commit

70f2391 ยท Jan 24, 2022

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๊ฐ€์ง€๋ฅผ ๋งํ•˜์‹œ์˜ค.