2 ๋ถ„ ์†Œ์š”

๐Ÿ“š ALGORITHM


๐Ÿ“š ํŠธ๋ฆฌ ( Tree )

ํŠธ๋ฆฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ?

ํŠธ๋ฆฌ๋ž€ ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.
๋น„์„ ํ˜• ๊ตฌ์กฐ์ด๋ฉฐ ์›์†Œ๋“ค ๊ฐ„์— ๊ณ„์ธต๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š” ๊ณ„์ธตํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
์ƒ์œ„ ์›์†Œ์—์„œ ํ•˜์œ„ ์›์†Œ๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ํ™•์žฅ๋˜๋Š” ํŠธ๋ฆฌ(๋‚˜๋ฌด)๋ชจ์–‘์˜ ๊ตฌ์กฐ์ด๋‹ค.

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

  • ๋…ธ๋“œ ( node )
    ํŠธ๋ฆฌ์˜ ์›์†Œ
  • ๊ฐ„์„  ( edge, branch, link )
    ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์œผ๋กœ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐ
  • ๋ฃจํŠธ ๋…ธ๋“œ ( root node )
    ํŠธ๋ฆฌ์˜ ์‹œ์ž‘ ๋…ธ๋“œ์ธ ์ตœ์ƒ์œ„ ๋…ธ๋“œ
  • ๋ฆฌํ”„ ๋…ธ๋“œ ( leaf node )
    ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ, ๋งจ ๋ฐ‘์— ์žˆ๋Š” ๋…ธ๋“œ
  • ํ˜•์ œ ๋…ธ๋“œ ( sibling node )
    ๊ฐ™์€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋“ค
  • ์กฐ์ƒ ๋…ธ๋“œ
    ๊ฐ„์„ ์„ ๋”ฐ๋ผ ๋ฃจํŠธ ๋…ธ๋“œ๊นŒ์ง€ ์ด๋ฅด๋Š” ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค
  • ์„œ๋ธŒ ํŠธ๋ฆฌ ( subtree ) = ๋ถ€ํŠธ๋ฆฌ
    ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์„ ๋Š์—ˆ์„ ๋•Œ ์ƒ์„ฑ๋˜๋Š”ํŠธ๋ฆฌ
  • ์ž์† ๋…ธ๋“œ
    ์„œ๋ธŒ ํŠธ๋ฆฌ์— ์žˆ๋Š” ํ•˜์œ„ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋“ค

  • ์ฐจ์ˆ˜ ( degree )
    • ๋…ธ๋“œ์˜ ์ž์ˆ˜ : ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์ž์‹ ๋…ธ๋“œ์˜ ์ˆ˜ (B์˜ ๋…ธ๋“œ : 3, C์˜ ๋…ธ๋“œ : 1)
    • ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜ : ํŠธ๋ฆฌ์— ์žˆ๋Š” ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’ (ํŠธ๋ฆฌ T์˜ ์ฐจ์ˆ˜ : 3)
  • ๋†’์ด
    • ๋…ธ๋“œ์˜ ๋†’์ด : ๋ฃจํŠธ์—์„œ ๋…ธ๋“œ์— ์ด๋ฅด๋Š” ๊ฐ„์„ ์˜ ์ˆ˜, ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ (B์˜ ๋†’์ด : 1, F์˜ ๋†’์ด : 2)
    • ํŠธ๋ฆฌ์˜ ๋†’์ด : ํŠธ๋ฆฌ์— ์žˆ๋Š” ๋…ธ๋“œ์˜ ๋†’์ด ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’ (ํŠธ๋ฆฌ T์˜ ๋†’์ด : 3)

์ด์ง„ํŠธ๋ฆฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ?

์ฐจ์ˆ˜๊ฐ€ 2์ธ ํŠธ๋ฆฌ
๊ฐ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ 2๊ฐœ ๊นŒ์ง€๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ
๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ์ตœ๋Œ€ 2๊ฐœ์˜ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ํŠน๋ณ„ํ•œ ํ˜•ํƒœ์˜ ํŠธ๋ฆฌ

์ด์ง„ํŠธ๋ฆฌ์˜ ํŠน์„ฑ

๋†’์ด i ( ๋ ˆ๋ฒจ i )์—์„œ์˜ ๋…ธ๋“œ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” 2^i๊ฐœ
๋†’์ด๊ฐ€ h์ธ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋Š” (h+1)๊ฐœ ์ด๋ฉฐ, ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” (2^(h+1)-1) ๊ฐœ๊ฐ€ ๋œ๋‹ค.

์ด์ง„ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜

ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ ( Full Binary Tree )

  • ๋ชจ๋“  ๋ ˆ๋ฒจ์— ๋…ธ๋“œ๊ณผ ํฌํ™” ์ƒํƒœ๋กœ ์ฐจ ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ
  • ๋†’์ด๊ฐ€ h ์ผ ๋•Œ, ์ตœ๋Œ€ ๋…ธ๋“œ ๊ฐœ์ˆ˜์ธ (2^(h+1)-1)์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ์ด์ง„ ํŠธ๋ฆฌ

์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ( Complete Binary Tree )

  • ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๋ฒˆํ˜ธ 1๋ฒˆ ๋ถ€ํ„ฐ n๋ฒˆ ๊นŒ์ง€ ๋นˆ ์ž๋ฆฌ๊ฐ€ ์—†๋Š” ์ด์ง„ ํŠธ๋ฆฌ

ํŽธํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ ( Skewed Binary Tree )

  • ๋†’์ด h์— ๋Œ€ํ•œ ์ตœ์†Œ ๊ฐœ์ˆ˜์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ ํ•œ์ชฝ ๋ฐฉํ–ฅ์˜ ์ž์‹ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„ ์ด์ง„ ํŠธ๋ฆฌ

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

ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋“ค์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ฐฉ๋ฌธ

  • ์ „์œ„ ์ˆœํšŒ ( preorder traversal ) : VLR
    ๋ถ€๋ชจ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ํ›„ ์ž์‹๋…ธ๋“œ๋ฅผ ์ขŒ,์šฐ ์ˆœ์„œ๋กœ ๋ฐฉ๋ฌธ

  • ์ค‘์œ„ ์ˆœํšŒ ( inorder traversal ) : LVR
    ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ, ๋ถ€๋ชจ๋…ธ๋“œ, ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธ

  • ํ›„์œ„ ์ˆœํšŒ ( postorder traversal ) : LRV
    ์ž์‹๋…ธ๋“œ๋ฅผ ์ขŒ์šฐ ์ˆœ์„œ๋กœ ๋ฐฉ๋ฌธํ•œ ํ›„, ๋ถ€๋ชจ๋…ธ๋“œ ๋ฐฉ๋ฌธ

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

๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฃจํŠธ ๋ฒˆํ˜ธ๋ฅผ 1๋กœ ์ง€์ •ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•œ๋‹ค.

  • ๋…ธ๋“œ ๋ฒˆํ˜ธ์˜ ์„ฑ์งˆ
    • ๋…ธ๋“œ ๋ฒˆํ˜ธ๊ฐ€ i ์ธ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ ๋ฒˆํ˜ธ : i/2
    • ๋…ธ๋“œ ๋ฒˆํ˜ธ๊ฐ€ i ์ธ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ ๋ฒˆํ˜ธ : 2*i
    • ๋…ธ๋“œ ๋ฒˆํ˜ธ๊ฐ€ i ์ธ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ๋ฒˆํ˜ธ : 2*i + 1
    • ๋ ˆ๋ฒจ n์˜ ๋…ธ๋“œ ๋ฒˆํ˜ธ ์‹œ์ž‘ ๋ฒˆํ˜ธ : 2^n
  • ๋†’์ด๊ฐ€ h์ธ ์ด์ง„ ํŠธ๋ฆฌ ์„ฑ์งˆ
    • ๋ ˆ๋ฒจ i์˜ ์ตœ๋Œ€ ๋…ธ๋“œ ์ˆ˜ : 2^i
    • ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ˆ˜ : 2^(h+1) - 1
    • ๋ฐฐ์—ด์˜ ํฌ๊ธฐ : 2^(h+1)

๋ฐฐ์—ด์„ ์ด์šฉํ•œ ์ด์ง„ ํŠธ๋ฆฌ์˜ ํ‘œํ˜„์˜ ๋‹จ์ 
์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฐ์—ด ์›์†Œ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋‚ญ๋น„ ๋ฐœ์ƒ
์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ ๋น„ํšจ์œจ์ 





๐Ÿ‘ ์ฐธ์กฐ
https://ahnyezi.github.io/java/javastudy-5-tree/