๐Ÿงฌ ์ž๋ฃŒ๊ตฌ์กฐ(2) - tree

ํ•ด๋กฑ๊ทธยท2024๋…„ 1์›” 20์ผ
0

CS

๋ชฉ๋ก ๋ณด๊ธฐ
4/4

Tree

๊ทธ๋ž˜ํ”„์˜ ์ผ์ข…์œผ๋กœ, ์ •์ ๊ณผ ๊ฐ„์„ ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ฐฐ์น˜ ํ˜•ํƒœ๋ฅผ ์ถ”์ƒํ™”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธธ์ด ํ•˜๋‚˜๋ฟ์ธ ๊ทธ๋ž˜ํ”„๋ฅผ ํŠธ๋ฆฌ ๋ผ๊ณ  ์นญํ•œ๋‹ค.
ํŠธ๋ฆฌ ์˜ ๊ตฌ์กฐ๋Š” โ€˜๋ฐ์ดํ„ฐ ์ €์žฅโ€™ ์˜ ์˜๋ฏธ๋ณด๋‹ค๋Š” โ€˜์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ํƒ์ƒ‰โ€™ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

ํŠธ๋ฆฌ ์ˆœํšŒ

ํŠธ๋ฆฌ์˜ ๊ฐ ๋…ธ๋“œ๋ฅผ ์ฒด๊ณ„์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค. ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ์ „์œ„ ์ˆœํšŒ, ์ค‘์œ„ ์ˆœํšŒ, ํ›„์œ„ ์ˆœํšŒ ์„ธ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

  1. ์ „์œ„ ์ˆœํšŒ (preorder)

    root โ†’ left โ†’ right ์ˆœ์„œ๋กœ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊นŠ์ด ์šฐ์„  ์ˆœํšŒ ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

  2. ์ค‘์œ„ ์ˆœํšŒ (Inorder)

    left โ†’ root โ†’ right ์ˆœ์„œ๋กœ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋Œ€์นญ ์ˆœํšŒ ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

  3. ํ›„์œ„ ์ˆœํšŒ (Postorder)

    right โ†’ left โ†’ root ์ˆœ์„œ๋กœ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

Binary Tree

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ํ˜•์˜ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ํŠธ๋ฆฌ๋Š” ์ด์ง„ ํŠธ๋ฆฌ ์ด๋‹ค.
์ด์ง„ ํŠธ๋ฆฌ๋Š” 2๊ฐœ ์ดํ•˜์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค. (์ž์‹ ๋…ธ๋“œ ๊ฐฏ์ˆ˜: 0 or 1 or 2)

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

    ํŽธํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ ๋Š” ํ•˜๋‚˜์˜ ์ฐจ์ˆ˜๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ๋ฐฐ์—ด(๋ฆฌ์ŠคํŠธ)์™€ ๊ฐ™์€ ์„ ํ˜• ๊ตฌ์กฐ์ด๋ฏ€๋กœ leaf node ํƒ์ƒ‰ ์‹œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์–ด ํšจ์œจ์ ์ด์ง€ ๋ชปํ•˜๋‹ค.
    O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

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

    ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ ๋Š” leaf node๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ 2๊ฐœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ ํ•ด๋‹น ์ฐจ์ˆ˜์— ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•…ํ•  ๋•Œ ์šฉ์ดํ•˜๋‹ค.

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

    ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ, ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ƒ์„ฑ๋˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    * heap์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ผ์ข…์ด๋‹ค.

Expression Tree

์ˆ˜์‹์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ

  • ์ค‘์œ„์ˆœํšŒ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ตํžˆ ์•Œ๊ณ  ์žˆ๋Š” ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์ด ํƒ„์ƒ a/b*c*d+e
  • ํ›„์œ„์ˆœํšŒ๋ฅผ ํ•˜๋ฉด ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ab/c*d*e+
  • ์ „์œ„์ˆœํšŒ๋ฅผ ํ•˜๋ฉด ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ์ „์œ„ ํ‘œ๊ธฐ๋ฒ• +**/abcde

Binary Search Tree

ํƒ์ƒ‰์„ ์œ„ํ•œ ์ด์ง„ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

  • left node์—๋Š” ๋ถ€๋ชจ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
  • right node์—๋Š” ๋ถ€๋ชจ๋…ธ๋“œ๋ณด๋‹ค ํฐ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
  • ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค.

์™œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๊ฐ€ ์ƒ๊ฒผ์„๊นŒ?

๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ํ˜„์žฌ์˜ ๋…ธ๋“œ๊ฐ’๋ณด๋‹ค ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์ž‘์œผ๋ฉด ์™ผ์ชฝ์œผ๋กœ, ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์›€์ง์ธ๋‹ค.
์ด๋ ‡๊ฒŒ ์›ํ•˜๋Š” ๊ฐ’์„ ์ „์ฒด ์˜์—ญ์—์„œ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ , ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ  ํƒ์ƒ‰ํ•˜๋ฏ€๋กœ ๋” ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

O(logN)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
๊ฐ ๋‹จ๊ณ„์—์„œ ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ๋Œ€๋žต ์ ˆ๋ฐ˜์œผ๋กœ ์ค„๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋งŒ์•ฝ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๊ฐ€ ๊ท ํ˜•์ด ์žกํ˜€ ์žˆ๋‹ค๋ฉด. ์ฆ‰, ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ผ๋ฉด.. ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” logN์ด ๋˜๋ฉฐ, ์ด์— ๋”ฐ๋ผ ํƒ์ƒ‰์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logN)์ด๋‹ค.

์™œ logN ์ผ๊นŒ?

์šด์ด ์ข‹์œผ๋ฉด ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์ค‘๊ฐ„๊ฐ’๊ณผ ๋™์ผํ•ด์„œ ํƒ์ƒ‰์ด ๋๋‚˜์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋‚จ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ์ด๋ฅผ ๊ณ ๋ คํ•ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด์ž.

ํ•˜์ง€๋งŒ ๋ถˆ๊ท ํ˜• ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ(์ตœ์•…), ๋†’์ด๊ฐ€ N์ด ๋˜์–ด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N)๊นŒ์ง€๋„ ๋  ์ˆ˜ ์žˆ๋‹ค.

โ†’ O(logN)์˜ ์„ฑ๋Šฅ ๋ณด์žฅ์„ ์œ„ํ•ด AVL ํŠธ๋ฆฌ, RB ํŠธ๋ฆฌ ๋“ฑ์žฅ

์Šค์Šค๋กœ ๊ท ํ˜•์„ ์žก๋Š” Binary Search Tree

ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์ง„ ํŽธํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ๋˜๋ฉด ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๋†’์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ์Šค์Šค๋กœ ๋†’์ด ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” AVL, RB ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

  • Red-Black Tree
    ์ •๊ธ€์—์„œ ์ •๋ฆฌํ•œ rb tree

  • AVL Tree

    • Balance Factor(BF)๋ฅผ ํ†ตํ•ด ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.
    • ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋†’์ด ์ฐจ์ด๊ฐ€ ์ตœ๋Œ€ 1์ด๋‹ค.
    • ์–ด๋–ค ์‹œ์ ์—์„œ ๋†’์ด ์ฐจ์ด๊ฐ€ 1๋ณด๋‹ค ์ปค์ง€๋ฉด rotation์„ ํ†ตํ•ด ๊ท ํ˜•์„ ์žก์•„ ๋†’์ด ์ฐจ์ด๋ฅผ ์ค„์ธ๋‹ค.
    • AVL ํŠธ๋ฆฌ๋Š” ๋†’์ด๋ฅผ logN์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฝ์ž…, ๊ฒ€์ƒ‰, ์‚ญ์ œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํ•ญ์ƒ O(logN)์ด๋‹ค.

      Balance Factor(BF)
      Balance Factor (k) = height(left(k)) - height(right(k))
      ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด์—์„œ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ๋บ€ ๊ฐ’

      • BF๊ฐ€ 1์ด๋ฉด ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ณด๋‹ค ํ•œ๋‹จ๊ณ„ ๋†’๋‹ค.
      • BF๊ฐ€ 0์ด๋ฉด ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด = ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด
      • BF๊ฐ€ -1์ด๋ฉด ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ณด๋‹ค ํ•œ๋‹จ๊ณ„ ๋‚ฎ๋‹ค.
  • Red-Black & AVL ์ฐจ์ด์ 

    • AVL ํŠธ๋ฆฌ๋Š” ๋”์šฑ ์—„๊ฒฉํ•œ ๊ท ํ˜•์„ ์ด๋ฃจ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— rb tree๋ณด๋‹ค ๋” ๋น ๋ฅธ ์กฐํšŒ ์ œ๊ณต

    • AVL ํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด BF๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ ๋…ธ๋“œ ๋‹น int ์ €์žฅ ํ•„์š”

    • RB ํŠธ๋ฆฌ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋Š์Šจํ•œ ๊ท ํ˜•์œผ๋กœ ์ธํ•ด ํšŒ์ „์ด ๊ฑฐ์˜ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•„ AVL tree ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์‚ฝ์ž…, ์‚ญ์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰

    • RB ํŠธ๋ฆฌ๋Š” ์ƒ‰๊น” ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋“œ๋‹น 1๋น„ํŠธ์˜ ์ •๋ณด๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (red or black: ํ”Œ๋ž˜๊ทธ ๋ฐ˜์ „๋งŒ ์‹œํ‚ค๋ฉด ๋จ)

    • RB ํŠธ๋ฆฌ๋Š” ๋งต, C++์˜ ๋ฉ€ํ‹ฐ๋งต, Java treeMap ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉ, AVL ํŠธ๋ฆฌ๋Š” ๋” ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ


Q. BST(Binary Search Tree)์™€ Binary Tree ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Binary Tree๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์ธ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ์ด๊ณ ,
Binary Search Tree๋Š” ์ด์ง„ ํƒ์ƒ‰๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒฐํ•ฉํ•œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ด์ง„ ํƒ์ƒ‰์˜ ํšจ์œจ์ ์ธ ํƒ์ƒ‰ ๋Šฅ๋ ฅ์„ ์œ ์ง€ํ•˜๋ฉด์„œ, ๋นˆ๋ฒˆํ•œ ์ž๋ฃŒ ์ž…๋ ฅ๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์™ผ์ชฝ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์•„์•ผ ํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ํŠธ๋ฆฌ์˜ ๊ฐ’์€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ์ปค์•ผ ํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํƒ์ƒ‰ ์—ฐ์‚ฐ์€ ํŠธ๋ฆฌ์˜ ๋†’์ด์— ์˜ํ–ฅ์„ ๋ฐ›์•„ ๋†’์ด๊ฐ€ h์ผ ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(h)์ด๋ฉฐ, ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์ณ์ง„ ๊ฒฝ์šฐ worst case๊ฐ€ ๋œ๋‹ค. ์ด๋Ÿฐ worst case๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ธฐ๋ฒ•์ด rb-tree ์ด๋‹ค.

Q. Red-Black Tree์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

rb-tree๋Š” bst๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํŠธ๋ฆฌ ํ˜•์‹ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, bst์˜ ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

bst๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํžˆ bst์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ–๋Š”๋‹ค.

๋…ธ๋“œ์˜ child๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, child๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋Š” nil ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. ์ด๋Ÿฌํ•œ nil๋“ค์„ leaf node๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

๐Ÿ’ก
1. node color is red or black.
2. new node color is red.
3. root node color is black.
4. double red doesnโ€™t exist.
5. the number of black nodes from the root node to the nil node is the same.

Q. Expression Tree

์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€?
Q. duplicates๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„  node_t์— count๋ผ๋Š” ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ์ œ์•ฝ์‚ฌํ•ญ์œผ๋กœ "rbtree.c"๋งŒ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ •๋ง๋กœ node_t๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ค‘๋ณต ์›์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ผ๋Š” ๊ฒƒ์ธ๊ฐ€?

A. ๊ฐ€๋Šฅํ•˜๋‹ค. ์ •๋ ฌ๋œ list๋ฅผ [1,1, 2, 2, 2, 3]๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๊ณ  {1: 2๊ฐœ, 2: 3๊ฐœ, 3: 1๊ฐœ} ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ, ์•ž์˜ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ผ๋Š” ์ด์•ผ๊ธฐ์ด๋‹ค.

profile
์‚ฌ๋ž‘์•„ ์ปดํ“จํ„ฐํ•ด ~

0๊ฐœ์˜ ๋Œ“๊ธ€