# ํŠธ๋ฆฌ(Tree)

written by sohyeon, hyemin ๐Ÿ’ก


# 1. ํŠธ๋ฆฌ๋ž€?

ํŠธ๋ฆฌ(tree)๋Š” ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜๋กœ, ๋ฐ์ดํ„ฐ ์‚ฌ์ด์˜ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.


# 2. ํŠธ๋ฆฌ์˜ ํŠน์ง•

  • ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜๋กœ, ์ตœ์†Œ ์—ฐ๊ฒฐ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.

  • ํŠธ๋ฆฌ๋Š” ๊ณ„์ธต ๋ชจ๋ธ์ด๋‹ค.

  • ํŠธ๋ฆฌ๋Š” DAG(Directed Acyclic Graphs, ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋Š” ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„)์˜ ํ•œ ์ข…๋ฅ˜๋กœ, ์‚ฌ์ดํด์ด ์—†๋‹ค.

  • ๋…ธ๋“œ๊ฐ€ N๊ฐœ์ธ ํŠธ๋ฆฌ๋Š” ํ•ญ์ƒ N-1๊ฐœ์˜ ๊ฐ„์„ (๊ฐ€์ง€, edge)์„ ๊ฐ€์ง„๋‹ค.

  • ํ•œ ๊ฐœ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ์ด ์กด์žฌํ•˜๋ฉฐ, ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋Š” ํ•œ ๊ฐœ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„๋‹ค.

  • ๋ถ€๋ชจ - ์ž์‹ ๊ด€๊ณ„์ด๋ฏ€๋กœ ํ๋ฆ„์€ top-bottom ์ด๋‚˜ bottom-top์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  • ์ˆœํšŒ๋Š” Pre-order(์ „์œ„), In-order(์ค‘์œ„) ์•„๋‹ˆ๋ฉด Post-order(ํ›„์œ„)๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  • ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜์—๋Š” ์ด์ง„ ํŠธ๋ฆฌ, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ, ๊ท ํ˜• ํŠธ๋ฆฌ(AVL ํŠธ๋ฆฌ, red-black ํŠธ๋ฆฌ), ์ด์ง„ ํž™(์ตœ๋Œ€ํž™, ์ตœ์†Œํž™) ๋“ฑ์ด ์žˆ๋‹ค.


# 3. ํŠธ๋ฆฌ ๊ด€๋ จ ์šฉ์–ด

ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋Š” ๋…ธ๋“œ(node) ์™€ ๊ฐ„์„ (๊ฐ€์ง€, edge)์ด๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ(root node)
    ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์œ—๋ถ€๋ถ„์— ์œ„์น˜ํ•˜๋Š” ๋…ธ๋“œ๋กœ, 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ๋‹จ๋ง ๋…ธ๋“œ(leaf node)
    ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์•„๋žซ๋ถ€๋ถ„์— ์œ„์น˜ํ•˜๋Š” ๋…ธ๋“œ๋กœ, ๋” ์ด์ƒ ๋ป—์–ด๋‚˜๊ฐˆ ์ˆ˜ ์—†๋Š” ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ ๋…ธ๋“œ๋ฅผ ๋งํ•œ๋‹ค.

  • ๋‚ด๋ถ€(internal) ๋…ธ๋“œ
    ๋ฃจํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฆฌํ”„๋ฅผ ์ œ์™ธํ•œ ๋…ธ๋“œ๋กœ, ๋‹ค๋ฅธ ์šฉ์–ด๋กœ ๋์ด ์•„๋‹Œ ๋…ธ๋“œ(non-terminal node)๋ผ๊ณ  ํ•œ๋‹ค.

  • ์ž์‹ ๋…ธ๋“œ(child node)
    ์–ด๋–ค ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์•„๋ž˜์ชฝ ๋…ธ๋“œ๋กœ, ๋…ธ๋“œ๋Š” ์ž์‹์„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด X๋Š” 1๊ฐœ, Y๋Š” 2๊ฐœ์˜ ์ž์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ๋ถ€๋ชจ ๋…ธ๋“œ(Parent Node)
    ์–ด๋–ค ๋…ธ๋“œ์—์„œ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์œ„์ชฝ ๋…ธ๋“œ๋กœ, ๋…ธ๋“œ๋Š” 1๊ฐœ์˜ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Y์˜ ๋ถ€๋ชจ๋Š” X์ด๋‹ค.

  • ํ˜•์ œ ๋…ธ๋“œ(Sibling Node)
    ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋ฅผ ๋งํ•œ๋‹ค.

  • ์กฐ์ƒ
    ์–ด๋–ค ๋…ธ๋“œ์—์„œ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์œ„์ชฝ ๋…ธ๋“œ ๋ชจ๋‘๋ฅผ ๋งํ•œ๋‹ค.

  • ์ž์†
    ์–ด๋–ค ๋…ธ๋“œ์—์„œ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์•„๋ž˜์ชฝ ๋…ธ๋“œ ๋ชจ๋‘๋ฅผ ๋งํ•œ๋‹ค.

  • ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ(level)
    ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ’์„ ๋งํ•œ๋‹ค. ๋ฃจํŠธ์˜ ๋ ˆ๋ฒจ์€ 0์ด๊ณ  ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ๊ฐ„์„ ์ด ํ•˜๋‚˜์”ฉ ์•„๋ž˜๋กœ ๋ป—์–ด๋‚˜๊ฐˆ ๋•Œ๋งˆ๋‹ค ๋ ˆ๋ฒจ์ด 1์”ฉ ๋Š˜์–ด๋‚œ๋‹ค.

  • ๋…ธ๋“œ์˜ ํฌ๊ธฐ(size)
    ์ž์‹ ์„ ํฌํ•จํ•œ ๋ชจ๋“  ์ž์† ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด X์˜ ํฌ๊ธฐ๋Š” 4์ด๋‹ค.

  • ๋…ธ๋“œ์˜ ๊นŠ์ด(depth)
    ๋ฃจํŠธ์—์„œ ์–ด๋–ค ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Y์˜ ๊นŠ์ด๋Š” 2์ด๋‹ค.

  • ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜(degree of tree)
    ๋…ธ๋“œ๊ฐ€ ๊ฐ–๋Š” ์ž์‹์˜ ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ๋˜ํ•œ, ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ n ์ดํ•˜์ธ ํŠธ๋ฆฌ๋ฅผ n์ง„ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ทธ๋ฆผ์€ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž์‹์ด 3๊ฐœ ์ดํ•˜์ด๋ฏ€๋กœ 3์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

  • ํŠธ๋ฆฌ์˜ ๋†’์ด(height)
    ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋ฆฌํ”„๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค.

  • ์„œ๋ธŒ ํŠธ๋ฆฌ
    ํŠธ๋ฆฌ ์•ˆ์—์„œ ๋‹ค์‹œ ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ ์ •ํ•˜๊ณ  ๊ทธ ์ž์†์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค.

  • ๋„ ํŠธ๋ฆฌ
    ๋…ธ๋“œ, ๊ฐ„์„ ์ด ์—†๋Š” ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค.

  • ์ˆœ์„œ ํŠธ๋ฆฌ์™€ ๋ฌด์ˆœ์„œ ํŠธ๋ฆฌ
    ํ˜•์ œ ๋…ธ๋“œ์˜ ์ˆœ์„œ๋ฅผ ๋”ฐ์ง€๋ฉด ์ˆœ์„œ ํŠธ๋ฆฌ(ordered tree), ๋”ฐ์ง€์ง€ ์•Š์œผ๋ฉด ๋ฌด์ˆœ์„œ ํŠธ๋ฆฌ(unordered tree)๋ผ๊ณ  ํ•œ๋‹ค.


# Reference & Additional Resources

https://gmlwjd9405.github.io/2018/08/12/data-structure-tree.html/

Last Updated: 12/5/2020, 11:36:44 AM