Tree - Data-Structure-Study/java-datastructure GitHub Wiki

Tree

Author: Dion, Ever

ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ ๊ณต๋ถ€

ํŠธ๋ฆฌ ๊ฐœ๊ด„

ํŠธ๋ฆฌ๋Š” ์‘์šฉ ๋ถ„์•ผ๊ฐ€ ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ํŠธ๋ฆฌ๋Š” ์กฐ์ง๋„ ๊ฐ™์ด ๊ณ„์ธต์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๊ณ , ์–ด๋–ค ํŠธ๋ฆฌ๋Š” ์ˆ˜์‹์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋˜ ์–ด๋–ค ํŠธ๋ฆฌ๋Š” ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์‹ฌ์ง€์–ด๋Š” ๋ฐ์ดํ„ฐ์˜ ํƒ์ƒ‰์„ ์œ„ํ•œ ํŠธ๋ฆฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์‘์šฉ ๋ถ„์•ผ ์ค‘ ํ•˜๋‚˜๋Š” ํƒ์ƒ‰์ธ๋ฐ, ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ๊ณต๋ถ€ํ•  ๊ฒƒ๋„ ๋งŽ๊ณ  ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ต๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ๊ฐ€ ์™œ ์ƒ๊ฒจ๋‚ฌ์„๊นŒ?

๋ฐฐ์—ด์ด๋‚˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ ฌ๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰ ์—ฐ์‚ฐ์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง„๋‹ค. ๋ฐฐ์—ด์€ ๋ฏธ๋ฆฌ ์ •๋ ฌํ•ด ๋†“์œผ๋ฉด ์ด์ง„ํƒ์ƒ‰์„ ํ†ตํ•ด ํšจ์œจ์ ์ธ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ ํ›„์—๋„ ์ •๋ ฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œํ•˜๋Š”๋ฐ O(N) ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•œ ๊ณ„์ธต์ (Hierarchical) ์ž๋ฃŒ ๊ตฌ์กฐ๊ฐ€ ํŠธ๋ฆฌ(Tree)์ด๋‹ค.

ํŠธ๋ฆฌ์˜ ๊ธฐ์ดˆ

ํŠธ๋ฆฌ(Tree)๋Š” ๋‚˜๋ฌด๋ฅผ ๋‹ฎ์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๊ณ  ํ•˜์ง€๋งŒ, ์ •ํ™•ํžˆ๋Š” ๋ฟŒ๋ฆฌ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ป—์–ด๋‚˜์˜ค๋Š” ๊ทธ ๊ตฌ์กฐ๋ฅผ ๋‹ฎ์•˜์Šต๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ ๊ณผํ•™์—์„œ ํŠธ๋ฆฌ๋Š” ๊ต‰์žฅํžˆ ํ™œ์šฉ๋„๊ฐ€ ๋†’์€ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์šด์˜์ฒด์ œ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , HTML, XML์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” DOM(Document Object Model)๋„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.[๊ทธ๋ž˜์„œ DOM Tree๋ผ๊ณ  ํ•จ]

๊ฒ€์ƒ‰ ์—”์ง„์ด๋‚˜, ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋„ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์— ๊ธฐ๋ฐ˜ํ•ด์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. (์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ž„.)

ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ

ํŠธ๋ฆฌ๋Š” ๋ฟŒ๋ฆฌ(Root), ๊ฐ€์ง€(Branch), ์žŽ(Leaf)์˜ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

Description of Figure 1 follows

๋ฟŒ๋ฆฌ, ๊ฐ€์ง€, ์žŽ ๋ชจ๋‘๊ฐ€ ๋˜‘๊ฐ™์€ Node๋ผ๋Š” ๊ฒƒ์„ ์—ผ๋‘์— ๋‘ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ ๊ทธ์ € ํŠธ๋ฆฌ ๋‚ด์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋ช…์นญ๋งŒ ๋‹ฌ๋ผ์งˆ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋ฟŒ๋ฆฌ์ธ Root Node๋Š” ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” Node๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ๊ฐ€์ง€(Branch)๋Š” ๋ฟŒ๋ฆฌ์™€ ์žŽ ์‚ฌ์ด์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ผ์ปซ๋Š” ๋ง์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์ง€์˜ ๋์— ๋งค๋‹ฌ๋ ค ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์žŽ(Leaf)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๋์— ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๋‹จ๋ง(Terminal) ๋…ธ๋“œ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

structure of tree

B์—์„œ D, E, F๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๋ฐ B๋ฅผ D, E, F์˜ ๋ถ€๋ชจ(Parent)๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , D, E, F๋ฅผ ์ž์‹(Child, Children)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

B์™€ C๋Š” ๊ฐ™์€ ๋ถ€๋ชจ(A)๋ฅผ ๊ฐ€์ง„ ํ˜•์ œ(Sibling)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

B์™€ G๋Š” ์•„๋ฌด๋Ÿฐ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ์˜ ์šฉ์–ด

  • ๋ฃจํŠธ(Root) ๋…ธ๋“œ : ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„์— ์žˆ๋Š” ๋…ธ๋“œ
  • ๋ถ€๋ชจ(Parent) ๋…ธ๋“œ : ๋…ธ๋“œ ์ƒ์œ„์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
  • ์ž์‹(Child) ๋…ธ๋“œ : ๋…ธ๋“œ ํ•˜์œ„์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
  • ํ˜•์ œ(Sibling) ๋…ธ๋“œ : ๋™์ผํ•œ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ
  • ์กฐ์ƒ(Ancestor) ๋…ธ๋“œ : ๋ฃจํŠธ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒฝ๋กœ์ƒ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค์˜ ์ง‘ํ•ฉ
  • ํ›„์†(Descendant) ๋…ธ๋“œ : ๋…ธ๋“œ ์•„๋ž˜๋กœ ๋งค๋‹ฌ๋ฆฐ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์˜ ์ง‘ํ•ฉ
  • ์„œ๋ธŒํŠธ๋ฆฌ(Subtree) : ๋…ธ๋“œ ์ž์‹ ๊ณผ ํ›„์† ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ
  • ์ฐจ์ˆ˜(Degree) : ์ž์‹ ๋…ธ๋“œ ์ˆ˜
  • ๋ ˆ๋ฒจ(Level) : ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋ ˆ๋ฒจ 1์— ์žˆ๊ณ  ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉฐ ๋ ˆ๋ฒจ์ด 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค. ๋ ˆ๋ฒจ์€ ๊นŠ์ด(Depth)์™€ ๊ฐ™๋‹ค
  • ๋†’์ด(Height) : ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๋ ˆ๋ฒจ
  • ํ‚ค(Key) : ํƒ์ƒ‰์— ์‚ฌ์šฉ๋˜๋Š” ๋…ธ๋“œ์— ์ €์žฅ๋œ ์ •๋ณด
  • ์ดํŒŒ๋ฆฌ(Leaf) ๋…ธ๋“œ : ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ, ๋‹จ๋ง(Terminal) ๋…ธ๋“œ ๋˜๋Š” ์™ธ๋ถ€(External) ๋…ธ๋“œ๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์ดํŒŒ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ๋ฅผ ๋น„ ๋‹จ๋ง(Non-Terminal) ๋…ธ๋“œ ๋˜๋Š” ๋‚ด๋ถ€(Internal) ๋…ธ๋“œ๋ผ๊ณ  ํ•œ๋‹ค

ํŠธ๋ฆฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ

์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋ ค๋ฉด ๊ฐ ๋…ธ๋“œ์— ํ‚ค์™€ ์ž์‹ ์ˆ˜๋งŒํผ์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜๊ฐ€ k๋ผ๋ฉด, k+1๊ฐœ์˜ ๋ ˆํผ๋Ÿฐ์Šค ํ•„๋“œ๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

์ตœ๋Œ€ ์ฐจ์ˆ˜๊ฐ€ k์ธ ํŠธ๋ฆฌ์— N๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด, null ๋ ˆํผ๋Ÿฐ์Šค ์ˆ˜๋Š” Nk - (N-1) = N(k-1) + 1 ์ด๋‹ค. ์—ฌ๊ธฐ์„œ Nk๋Š” ์ด ๋ ˆํผ๋Ÿฐ์Šค ์ˆ˜์ด๊ณ , N-1์€ ํŠธ๋ฆฌ์—์„œ ์‹ค์ œ ๋ถ€๋ชจ ์ž์‹์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ ˆํผ๋Ÿฐ์Šค ์ˆ˜์ด๋‹ค.

  • ์ดํŒŒ๋ฆฌ๋…ธ๋“œ๋„ k๊ฐœ์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • 2๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  1๊ฐœ์˜ ์„ ์ด ํ•„์š”ํ•˜๊ณ , N๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  N-1๊ฐœ์˜ ์„ ์ด ํ•„์š”ํ•˜๋‹ค

๋”ฐ๋ผ์„œ k๊ฐ€ ํด์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•ด์ง€๋Š” ๊ฒƒ์€ ๋ฌผ๋ก  ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ณผ์ •์—์„œ null ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์ ์œผ๋กœ๋„ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.

ํŠธ๋ฆฌ์˜ ๊ฒฝ๋กœ(Path)

ํŠธ๋ฆฌ์—์„œ ๊ฒฝ๋กœ๋Š” ํ•œ ๋…ธ๋“œ์—์„œ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ํ•œ ๋…ธ๋“œ๊นŒ์ง€ ์ด๋ฅด๋Š” ๊ธธ ์‚ฌ์ด์— ๋†“์—ฌ์žˆ๋Š” ์ˆœ์„œ์ž…๋‹ˆ๋‹ค.

tree data structure

์˜ˆ๋ฅผ ๋“ค์–ด์„œ A๋…ธ๋“œ์—์„œ J๋…ธ๋“œ๊นŒ์ง€ ์ด๋ฅธ๋‹ค๋ฉด A๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ, B๋…ธ๋“œ๋ฅผ ๊ฑฐ์น˜๊ณ , E๋…ธ๋“œ๋ฅผ ๊ฑฐ์นœ๋‹ค์Œ J๋…ธ๋“œ์— ๋„์ฐฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ "A-B-E-J"๋ฅผ A์—์„œ J๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (Path between A & J)

๊ฒฝ๋กœ๋Š” ๊ธธ์ด(Length)๋ผ๋Š” ์†์„ฑ์„ ๊ฐ€์ง€๋Š”๋ฐ, ์ถœ๋ฐœํ•˜๋Š” ๋…ธ๋“œ์—์„œ ๋ชฉ์ ์ง€ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ์ณ์•ผํ•˜๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์–˜๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ, ์ถœ๋ฐœํ•˜๋Š” ๋…ธ๋“œ๋Š” ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— A์—์„œ J๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋Š” 3์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๋…ธ๋“œ์˜ ๊นŠ์ด(Depth)๋Š” ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ํ•ด๋‹น ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.

img

A์—์„œ H๊นŒ์ง€์˜ ๊ฒฝ๋กœ๊ฐ€ "A-D-H" ์ด๋ฏ€๋กœ ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋Š” 2์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊นŠ์ด๋Š” 2์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ๋ฃจํŠธ์˜ ๊นŠ์ด๋Š” ์–ผ๋งˆ์ผ๊นŒ์š”? 0์ž…๋‹ˆ๋‹ค.

๊นŠ์ด์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์˜ ์šฉ์–ด๋กœ ๋ ˆ๋ฒจ(Level)๊ณผ ๋†’์ด(Height)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ์€ ๊นŠ์ด๊ฐ€ ๊ฐ™์€ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ์„ ์ผ์ปซ๋Š” ๋ง์ž…๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” '๊ฐ€์žฅ ๊นŠ์€ ๊ณณ'์— ์žˆ๋Š” ์žŽ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊นŠ์ด๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์œ„ ๊ทธ๋ฆผ์— ์žˆ๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” ์–ผ๋งˆ์ผ๊นŒ์š”?

3์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์„ค๋ช…ํ•  ๊ฐœ๋…์€ ์ฐจ์ˆ˜(Degree)์ž…๋‹ˆ๋‹ค. ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๋ผํ•จ์€ ๊ทธ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๊ณ , ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜๋ผํ•จ์€ ํŠธ๋ฆฌ ๋‚ด์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค ๊ฐ€์šด๋ฐ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์—์„œ๋Š” A๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๋Š” 3์ด๊ณ , B ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๋Š” 2์ž…๋‹ˆ๋‹ค. ํŠธ๋ฆฌ ์ „์ฒด์ ์œผ๋กœ ๋ณด๋ฉด ์ž์‹์ด ๊ฐ€์žฅ ๋งŽ์€ ๋…ธ๋“œ๋Š” A์ด๋ฏ€๋กœ ์œ„ ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜๋Š” 3์ž…๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ์˜ ํ‘œํ˜„

ํŠธ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊พธ๋กœ ๋œ ๋‚˜๋ฌด ๊ทธ๋ฆผ์ด ๋Œ€ํ‘œ์ ์ด์ง€๋งŒ, ๊ทธ ์™ธ์—๋„ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋“ค์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ค‘์ฒฉ๋œ ๊ด„ํ˜ธ(Nested Parenthesis) ํ‘œํ˜„๋ฒ•

๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋“ค์„ ๊ด„ํ˜ธ๋กœ ๊ฐ™์ด ๋ฌถ์–ด ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ฝ๊ธฐ๋Š” ๋‹ค์†Œ ์–ด๋ ต์ง€๋งŒ, ํŠธ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ๊ณต์‹์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์ฒฉ๋œ ์ง‘ํ•ฉ(Nested Set) ํ‘œํ˜„๋ฒ•

ํŠธ๋ฆฌ๊ฐ€ ํ•˜์œ„ ํŠธ๋ฆฌ์˜ ์ง‘ํ•ฉ์ด๋ผ๋Š” ๊ด€๊ณ„๋ฅผ ์ž˜ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

img

๋“ค์—ฌ์“ฐ๊ธฐ(Indentation) ํ‘œํ˜„๋ฒ•

๋งˆ์ง€๋ง‰์œผ๋กœ ํŠธ๋ฆฌ๋Š” ๋“ค์—ฌ์“ฐ๊ธฐ (Indentation)๋กœ๋„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋“ค์—ฌ์“ฐ๊ธฐ ํ‘œํ˜„๋ฒ•์€ ์ž๋ฃŒ์˜ ๊ณ„์ธต์ ์ธ ํŠน์ง•์„ ์ž˜ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋…ธ๋“œ์˜ ํ‘œํ˜„

๋…ธ๋“œ์˜ ํ‘œํ˜„์€ ๋ถ€๋ชจ์™€ ์ž์‹, ๊ทธ๋ฆฌ๊ณ  ํ˜•์ œ ๋…ธ๋“œ๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐ์ง“๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ ๋…ธ๋“œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” 'N-๋งํฌ(N-Link)' ํ‘œํ˜„๋ฒ•์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” '์™ผ์ชฝ ์ž์‹-์˜ค๋ฅธ์ชฝ ํ˜•์ œ(Left Child-Right Sibling)' ํ‘œํ˜„๋ฒ•์ž…๋‹ˆ๋‹ค.

N-Link

N-Link๋Š” ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ N์ด๋ผ๋ฉด, ๋…ธ๋“œ๊ฐ€ N๊ฐœ์˜ ๋งํฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ์ด ๋งํฌ๋“ค์ด ๊ฐ๊ฐ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ด ๋…ธ๋“œ๋กœ ํŠธ๋ฆฌ๋ฅผ ์ด๋ฃฌ๋‹ค๋ฉด ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชจ์Šต์ด ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ ์ด๋ฏธ์ง€

์ด ํ‘œํ˜„๋ฒ•์€ ์–ธ๋œป ๋ดค์„ ๋•Œ์—๋Š” ์“ธ๋งŒํ•ด ๋ณด์ด์ง€๋งŒ, ์ฐจ์ˆ˜(Degree)๊ฐ€ ๋…ธ๋“œ๋งˆ๋‹ค ๋‹ฌ๋ผ์ง€๋Š” ํŠธ๋ฆฌ์—๋Š” ์ ์šฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์šด ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Left Child-Right Sibling ํ‘œํ˜„๋ฒ•

์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ‘œํ˜„๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด N๊ฐœ์˜ ์ฐจ์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ์˜ ํ‘œํ˜„์ด ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ, ์™ผ์ชฝ ์ž์‹-์˜ค๋ฅธ์ชฝ ํ˜•์ œ๋งŒ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ ์ด๋ฏธ์ง€

์ด ํ‘œํ˜„๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ํŠธ๋ฆฌ์—์„œ ์–ด๋Š ํ•œ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋ฅผ ์–ป์œผ๋ ค๋ฉด ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์–ป๊ณ , ๋˜ ๊ทธ ๋‹ค์Œ ์˜ค๋ฅธ์ชฝ ํ˜•์ œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ณ„์†ํ•ด์„œ ์–ป์–ด ๋‚˜๊ฐ€๋ฉด ๊ฒฐ๊ตญ์—๋Š” ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

LCRS๋Š” ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ ์ผ์ •ํ•˜์ง€ ์•Š์€ ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋งค์šฐ ํšจ์œจ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ

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

์ˆ˜์‹ํŠธ๋ฆฌ

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ

๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ

References

๋‡Œ๋ฅผ ์ž๊ทนํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

http://www.btechsmartclass.com/data_structures/tree-terminology.html

https://adrianmejia.com/data-structures-for-beginners-trees-binary-search-tree-tutorial/

https://en.wikipedia.org/wiki/Nested_set_model

์†Œ๊ฐ

Dion
๋‹ค ํ•˜๊ณ  ์ ๊ธฐ

Ever
๋‹ค ํ•˜๊ณ  ์ ๊ธฐ

Hamill
๋‹ค ํ•˜๊ณ  ์ ๊ธฐ

Lynn
๋‹ค ํ•˜๊ณ  ์ ๊ธฐ

Sunny
๋‹ค ํ•˜๊ณ  ์ ๊ธฐ