Skip to content

Latest commit

ย 

History

History
79 lines (67 loc) ยท 3.27 KB

File metadata and controls

79 lines (67 loc) ยท 3.27 KB

Tree

Tree ๋ž€?

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

๋งŒ์กฑํ•ด์•ผํ•˜๋Š” ์กฐ๊ฑด 5๊ฐ€์ง€

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

ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์šฉ์–ด

  • ๋ฃจํŠธ ๋…ธ๋“œ: ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ, ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„๋‹ค.
  • ๋‹จ๋ง ๋…ธ๋“œ(terminal, leaf): ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ
  • ๋‚ด๋ถ€ ๋…ธ๋“œ(Internal): ๋‹จ๋ง ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ
  • ๋ถ€๋ชจ ๋…ธ๋“œ: ๋ฃจํŠธ ๋…ธ๋“œ ๋ฐฉํ–ฅ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
  • ํ˜•์ œ ๋…ธ๋“œ: ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ
  • ์ž์‹ ๋…ธ๋“œ: ๋ฃจํŠธ ๋…ธ๋“œ ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
  • ๊ฐ„์„ : ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ 
  • ๋…ธ๋“œ์˜ ํฌ๊ธฐ: ์ž์‹ ์„ ํฌํ•จํ•œ ๋ชจ๋“  ์ž์†๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
  • ๊นŠ์ด: ๋ฃจํŠธ์—์„œ ์–ด๋–  ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ณ์•ผํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜
  • ๋ ˆ๋ฒจ: ํŠธ๋ฆฌ์˜ ํŠน์ • ๊นŠ์ด๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ
  • ์ฐจ์ˆ˜: ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ง€๋‹Œ ์ž์‹์˜ ์ˆ˜
  • ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜: ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜
  • ํŠธ๋ฆฌ์˜ ๋†’์ด: ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๊นŠ์ˆ™ํžˆ ์žˆ๋Š” ๋…ธ๋“œ์˜ ๊นŠ์ด

Binary Tree

์ด์ง„ํŠธ๋ฆฌ๋ž€ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘๊ฐœ์˜ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ์ด๋‹ค. ํž™ ์ •๋ ฌ๊ณผ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋ฒ•์ด๋‹ค.

  • ์ „ ์ด์ง„ ํŠธ๋ฆฌ(full)
    • ์žŽ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋ฅผ 2๊ฐœ ๋˜๋Š” 0๊ฐœ ๊ฐ€์ง
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(complete)
    • ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ๋“ค์ด ๊ฝ‰ ์ฑ„์›Œ์ง„ ์ด์ง„ํŠธ๋ฆฌ
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์™ผ์ชฝ ๋‹จ๋ง๋…ธ๋“œ๋ถ€ํ„ฐ ์ฑ„์›Œ์ ธ์•ผ ํ•œ๋‹ค.
    • 1์ฐจ์› ๋ฐฐ์—ด๋กœ๋„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅ
  • ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ(balanced)
    • ๋ชจ๋“  ์žŽ์ƒˆ ๋…ธ๋“œ์˜ ๊นŠ์ด ์ฐจ์ด๊ฐ€ ์ตœ๋Œ€ 1์ธ ํŠธ๋ฆฌ
    • ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊นŠ์ด๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋…ธ๋“œ๊ฐ€ n๊ฐœ์ธ ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊นŠ์ด๋Š” log n์„ ๋‚ด๋ฆผํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

์ˆœํšŒ

์ „์œ„ ์ˆœํšŒ ์ฝ”๋“œ
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)

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