# AVLํŠธ๋ฆฌ (AVL Tree)

written by sohyeon, hyemin ๐Ÿ’ก


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

AVLํŠธ๋ฆฌ๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ๊ท ํ˜•์žก์ธ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์ด๋‹ค.
์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ œ์–ดํ•ด ์ „์ฒด ํŠธ๋ฆฌ๊ฐ€ ์–ด๋Š ํ•œ์ชฝ์œผ๋กœ ๋Š˜์–ด์ง€์ง€ ์•Š๋„๋ก ํ•œ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์ผ์ข…์ด๋‹ค.
ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ h์ผ ๋•Œ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ๊ณ„์‚ฐ๋ณต์žก์„ฑ์€ O(h)์ด๊ธฐ ๋•Œ๋ฌธ์—
๊ท ํ˜•๋œ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด h๋ฅผ ์ค„์ด๊ณ ์ž ํ•˜๋Š” ๋ฐœ์ƒ์—์„œ ๋น„๋กฏ๋์Šต๋‹ˆ๋‹ค.

๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ขŒ์ธก ์„œ๋ธŒ๋…ธ๋“œ์™€ ์šฐ์ธก ์„œ๋ธŒ๋…ธ๋“œ์˜ ๋†’์ด ์ฐจ์ด๊ฐ€ 1๋ณด๋‹ค ํฌ์ง€ ์•Š์€ ํ˜•ํƒœ์ด๋‹ค.

# 1-1. ๊ท ํ˜•๊ณ„์ˆ˜(BF, Balance Factor)

BalanceFactor = height(left subtree) - height(right subtree)

์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด์—์„œ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ๋บ€ ๊ฒƒ์ด๋‹ค.
๋‘ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ์žŽ์ƒˆ๋…ธ๋“œ๋ผ๋ฉด BF๋Š” 0์ด๋‹ค(empty tree์˜ BF๋Š” -1๋กœ ์ •์˜).
BF๋Š” ์ •์ˆ˜ ๋ฒ”์œ„ [-1, + 1]์ธ๋ฐ ๋…ธ๋“œ ์‚ฝ์ž… ์ดํ›„์— ๊ทธ๋ž˜ํ”„์˜ ๊ท ํ˜• ๊ณ„์ˆ˜๊ฐ€ -1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ +1๋ณด๋‹ค ํด ์ˆ˜ ์žˆ๋‹ค.
์ด ๊ฒฝ์šฐ ํšŒ์ „์„ ํ†ตํ•ด ๊ท ํ˜•์„ ๋งž์ถฐ์ค„ ์ˆ˜ ์žˆ๋‹ค.

# 2. ํšŒ์ „ (Rotation)

์‚ฝ์ž…์œผ๋กœ ์ธํ–‰ ๋ถˆ๊ท ํ˜•ํ•ด์ง„ ๊ทธ๋ž˜ํ”„์˜ ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.

# 2-1. Single Rotation

single rotation์€ rotation์„ ํ•œ ์ฐจ๋ก€ ์ˆ˜ํ–‰ํ•ด BF๊ฐ€ 0์ธ ๊ท ํ˜•์žกํžŒ ๊ทธ๋ž˜ํ”„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
Single Rotation์€ ํšŒ์ „ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.

  • Single Left Rotation
  • Single Right Rotation

# ์‹คํ–‰ ๊ธฐ์ค€

์‚ฝ์ž… ์—ฐ์‚ฐ์˜ single rotation์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‹ค์‹œ๋œ๋‹ค.

X: BF์˜ ์ ˆ๋Œ€๊ฐ’์ด 2 ์ด์ƒ์ด๋ฉด์„œ ์ƒˆ ๋…ธ๋“œ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์กฐ์ƒ ๋…ธ๋“œ
Y: ์ž์‹๋…ธ๋“œ, BF ์ ˆ๋Œ€๊ฐ’์ด 1 ์ดํ•˜์ธ ๋…ธ๋“œ

  • Y๊ฐ€ X์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ, Y์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ์ƒํƒœ : Y๋ฅผ ๊ธฐ์ค€์œผ๋กœ right rotation
  • Y๊ฐ€ X์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ, Y์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ์ƒํƒœ : Y๋ฅผ ๊ธฐ์ค€์œผ๋กœ left rotation

# Single Right Rotation ์˜ˆ์‹œ

์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด 'BF๊ฐ€ 2 ์ด์ƒ, 2 ์ดํ•˜์ผ ๋•Œ rotation์„ ์‹ค์‹œํ•œ๋‹ค'๋Š” ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•œ๋‹ค.
X์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ์ธ Y๋ฅผ ๊ธฐ์ค€์œผ๋กœ single rotation์„ ์‹ค์‹œํ•œ๋‹ค.
Y๋ฅผ ์ƒˆ๋กœ์šด ๋ฃจํŠธ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  T1๋งŒ h+1์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ h์ธ ์ ์„ ๊ฐ์•ˆํ•˜๋ฉด
rotation ์‹ค์‹œ ํ›„์˜ X, Y์˜ BF๋Š” ๊ฐ๊ฐ 0, 0์ด ๋˜์–ด ๊ท ํ˜• ํŠธ๋ฆฌ๋ฅผ ์ด๋ฃฌ๋‹ค.

# 2-2. Double Rotation

rotation ํ•œ ์ฐจ๋ก€๋งŒ์œผ๋กœ ์›ํ•˜๋Š” ์‚ฝ์ž… ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์ง€ ๋ชปํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.
์ด ๊ฒฝ์šฐ ๋‘๋ฒˆ์˜ rotation์„ ์ˆ˜ํ–‰ํ•ด ๊ท ํ˜•์„ ๋งž์ถ˜๋‹ค.

single rotation๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

  • Double Left Rotation
  • Double Right Rotation

# ์‹คํ–‰๊ธฐ์ค€

์‚ฝ์ž… ์—ฐ์‚ฐ์˜ double rotation์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‹ค์‹œ๋œ๋‹ค.

X: BF์˜ ์ ˆ๋Œ€๊ฐ’์ด 2 ์ด์ƒ์ด๋ฉด์„œ ์ƒˆ ๋…ธ๋“œ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์กฐ์ƒ ๋…ธ๋“œ
Y: X์˜ ์ž์‹๋…ธ๋“œ์ด๋ฉด์„œ BF ์ ˆ๋Œ€๊ฐ’์ด 1์ดํ•˜

  • Y๊ฐ€ X์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ, Y์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ๊ฒฝ์šฐ
  • Y๊ฐ€ X์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ, Y์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ๊ฒฝ์šฐ

์œ„์˜ ๊ทธ๋ฆผ ์˜ˆ์‹œ๋Š” X, Y, Z์˜ BF๊ฐ€ ๊ฐ๊ฐ 2, -1, 1์ด ๋œ๋‹ค.
๋”ฐ๋ผ์„œ X๋ฅผ ๋ฃจํŠธ๋…ธ๋“œ๋กœ ํ•˜๋Š” ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๊ท ํ˜•์„ ๋งž์ถฐ์•ผ๋  ๋Œ€์ƒ์ด ๋œ๋‹ค.

# Double Right Lotation ์˜ˆ์‹œ

  • ์ฒซ๋ฒˆ์งธ : Z๋ฅผ ์ค‘์‹ฌ์œผ๋กœ left rotation ์ˆ˜ํ–‰ (T1๋ฅผ ์žก์•„ ๋‹น๊ฒจ ๋‚ด๋ฆฌ๋Š” ๊ณผ์ •)
  • ๋‘๋ฒˆ์งธ : Z๋ฅผ ์ค‘์‹ฌ์œผ๋กœ right rotation ์ˆ˜ํ–‰ (T4๋ฅผ ์žก์•„ ๋‹น๊ฒจ ๋‚ด๋ฆฌ๋Š” ๊ณผ์ •)

์œ„ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด BF๊ฐ€ ๊ฐ๊ฐ -1, 0, 0์ด ๋˜์–ด์„œ ๊ท ํ˜•์„ ์ด๋ฃจ๊ฒŒ ๋œ๋‹ค.

# 3. ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ


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