[์ž๋ฃŒ๊ตฌ์กฐ] 7. ํŠธ๋ฆฌ

7์žฅ. ํŠธ๋ฆฌ

1. ํŠธ๋ฆฌ์˜ ๊ฐœ๋…

IMG1

ํŠธ๋ฆฌ๋กœ ๋‚˜ํƒ€๋‚ธ ํŠธ๋ฆฌ

๊ณ„์ธตํ˜• ๊ตฌ์กฐ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์— ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

ex1) Tree -> Binary Tree / m-way Tree

ex2)
Nodes : ๋ชจ์ฐจ๋ฅดํŠธ, ๋ฐ”ํ, ๋ฒ ํ† ๋ฒค, ์„ธ์ž”, ํ”ผ์นด์†Œ, ์•„์ธ์Šˆํƒ€์ธ, ๋‰ดํ„ด

Root : ์œ„์ธ -> ์˜ˆ์ˆ ๊ฐ€ / ํ•™์ž

2. ์šฉ์–ด

IMG2

  • ๋…ธ๋“œ (์ •์ )
    • ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ญ๋ชฉ
  • ์„œ๋ธŒํŠธ๋ฆฌ
    • ํŠน์ • ๋…ธ๋“œ ํ•˜์œ„๋กœ ํŒŒ์ƒ๋˜๋Š” ์ƒˆ๋กœ์šด ํŠธ๋ฆฌ
  • ๋ฃจํŠธ๋…ธ๋“œ
    • ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์ตœ์ƒ์œ„ ๋…ธ๋“œ
  • ๋ฆฌํ”„๋…ธ๋“œ
    • ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์ตœํ•˜์œ„ ๋…ธ๋“œ
  • ์ง„์ž… ์ฐจ์ˆ˜
    • ๋…ธ๋“œ๋กœ ๋“ค์–ด์˜ค๋Š” ์„ ์˜ ๊ฐœ์ˆ˜
    • ๋ฃจํŠธ๋…ธ๋“œ๋Š” 0์ด๋ฉฐ ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋Š” ๋ฌด์กฐ๊ฑด 1์ด๋‹ค. 2์ด์ƒ์ธ ๊ฒฝ์šฐ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋œ๋‹ค.
  • ์ง„์ถœ ์ฐจ์ˆ˜
    • ๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ๋‚˜๊ฐ€๋Š” ์„ ์˜ ๊ฐœ์ˆ˜
    • ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. (degree of a node)
    • ์ตœ๋Œ€ ์ฐจ์ˆ˜๊ฐ€ ํŠธ๋ฆฌ ์ „์ฒด์˜ ์ฐจ์ˆ˜๊ฐ€ ๋œ๋‹ค. (degree of a tree)
  • ๋ ˆ๋ฒจ
    • ๋ฃจํŠธ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ๋…ธ๋“œ๊นŒ์ง€ ์ด์–ด์ง„ ์„ ์˜ ๊ธธ์ด

3. ํŠธ๋ฆฌ์˜ ์ถ”์ƒ์ž๋ฃŒํ˜• (ADT)

Tree Create()
::= ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Destroy(Tree)
::= ํŠธ๋ฆฌ ๊ฐ์ฒด๊ฐ€ ์ ์œ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Tree Copy_Tree(Tree)
::= ํŠธ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Node Insert(n)
::= ํŠธ๋ฆฌ์— ๋…ธ๋“œ n์„ ์‚ฝ์ž…ํ•œ๋‹ค.
Delete()
::= ํŠธ๋ฆฌ์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ๋ณดํ†ต ์žฌ๊ตฌ์„ฑ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•œ๋‹ค.
Node Root()
::= ๋ฃจํŠธ ๋…ธ๋“œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Node Parent(n)
::= ๋…ธ๋“œ n์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. n์ด ๋ฃจํŠธ๋…ธ๋“œ์ด๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
List<Node> Children(n)
::= ๋…ธ๋“œ n์˜ ์ž์‹ ๋…ธ๋“œ๋“ค์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋…ธ๋“œ n์ด ๋ฆฌํ”„๋…ธ๋“œ์ด๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
boolean IsRoot(n)
::= ๋…ธ๋“œ n์ด ๋ฃจํŠธ๋…ธ๋“œ์ด๋ฉด True, ์•„๋‹ˆ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
boolean IsInternal(n)
::= ๋…ธ๋“œ n์ด ๋‚ด๋ถ€๋…ธ๋“œ์ด๋ฉด True, ์•„๋‹ˆ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
boolean IsLeaf(n)
::= ๋…ธ๋“œ n์ด ๋ฆฌํ”„๋…ธ๋“œ์ด๋ฉด True, ์•„๋‹ˆ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
boolean IsEmpty(Tree)
::= ํŠธ๋ฆฌ๊ฐ€ ๋น„์—ˆ์œผ๋ฉด True, ์•„๋‹ˆ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
Replace(n, m)
::= ๋…ธ๋“œ n์„ ๋…ธ๋“œ m์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค.

4. ์ด์ง„ ํŠธ๋ฆฌ

์ •์˜

ํŠธ๋ฆฌ์— ์†ํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ 2 ์ดํ•˜์ธ ํŠธ๋ฆฌ๋ฅผ ์ด์ง„ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.

  • ์ˆ˜ํ•™์ ์ธ ์ด๋ก  ์ •๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
  • ๊ตฌํ˜„ํ•˜๊ธฐ ๊ฐ„ํŽธํ•˜๋‹ค.
  • ์ผ๋ฐ˜์„ฑ์„ ์žƒ์ง€ ์•Š๊ณ  ๋ฐฉํ–ฅ์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์ข‹๋‹ค. (์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ)

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

  • ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ (Perfect Binary Tree)
    • ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€ ๊ฐœ์ˆ˜์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ
    • IMG3
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ (Complete Binary Tree)
    • ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ์ตœ๋Œ€ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์—์„œ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›Œ์ง€๊ณ  ์žˆ๋Š” ํŠธ๋ฆฌ

๋ฐฐ์—ด์„ ์ด์šฉํ•œ ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌํ˜„

ํŠธ๋ฆฌ๊ฐ€ ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ ํ˜น์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ธ ๊ฒฝ์šฐ ๋‚ญ๋น„๋˜๋Š” ๊ณต๊ฐ„ ์—†์ด ํšจ์œจ์ ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ

๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๋ฏ€๋กœ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

IMG4

5. ์ด์ง„ ํŠธ๋ฆฌ ์—ฐ์‚ฐ

์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ

ํŠธ๋ฆฌ์˜ ๊ฐ ๋…ธ๋“œ๋ฅผ ๋น ์ง์—†์ด, ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต ์—†์ด ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ์ˆœํšŒ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

  • ์ˆœํšŒ ํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ฅธ ๊ตฌ๋ถ„
    • ์ „์œ„ ์ˆœํšŒ(PLR)
      • ๋ฃจํŠธ
      • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ „์œ„ ์ˆœํšŒ
      • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ „์œ„ ์ˆœํšŒ
    • ์ค‘์œ„ ์ˆœํšŒ(LPR)
      • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ค‘์œ„ ์ˆœํšŒ
      • ๋ฃจํŠธ
      • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ค‘์œ„ ์ˆœํšŒ
    • ํ›„์œ„ ์ˆœํšŒ(LRP)
      • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ํ›„์œ„ ์ˆœํšŒ
      • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ํ›„์œ„ ์ˆœํšŒ
      • ๋ฃจํŠธ