Computer Science/Data Structure

[์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ (Tree)

minzhen 2022. 4. 26. 16:00

๐Ÿ“Œ Questions

  1. BST์™€ Binary Tree์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”. (N์‚ฌ ์ „ํ™”๋ฉด์ ‘)
  2. Tree๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€?
  3. ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ์—์„œ ๊ฒ€์ƒ‰์†๋„๊ฐ€ ๊ฐ€์žฅ ๋А๋ฆฐ์ผ€์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์ธ๊ฐ€?

 


Tree์˜ ๊ฐœ๋…

๋น„์„ ํ˜• ๊ตฌ์กฐ๋กœ, ์›์†Œ๋“ค ๊ฐ„์— 1:n ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฝ์ž…ํ•˜๊ณ  ์‚ญ์ œํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ๊ด€์‹ฌ์ด ๋งŽ์•˜๋˜ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์— ๋น„ํ•ด ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…/์‚ญ์ œ๋ณด๋‹ค๋Š” 'ํ‘œํ˜„'์— ํฌ์ปค์Šค๊ฐ€ ๋งž์ถฐ์ ธ์žˆ๋‹ค.

ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ด๊ธฐ ๋ณด๋‹ค ํŠธ๋ฆฌ๋Š” '๋ฌด์—‡์ธ๊ฐ€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋„๊ตฌ'๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋“œ๋””์–ด ํ๋ฅผ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ ํ˜•(linear)์ž๋ฃŒ๊ตฌ์กฐ ๋‚ด์šฉ์ด ๋งˆ๋ฌด๋ฆฌ๋˜๊ณ  ์ด์ œ๋ถ€ํ„ฐ๋Š” ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์‹œ์ž‘๋œ๋‹ค. ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋Œ€ํ‘œ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ”๋กœ ํŠธ๋ฆฌ(Tree)์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.

๊ฐ€๊ณ„๋„๋‚˜ ์กฐ์ง๋„ ๋“ฑ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ณ„์ธตํ˜• ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šธ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ณ„์ธตํ˜• ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ํ˜•ํƒœ๊ฐ€ ํŠธ๋ฆฌ์ด๋‹ค.



Tree ๊ตฌ์„ฑ์š”์†Œ

  • Node : ํŠธ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ (๋ฐ์ดํ„ฐ์™€ ๋‹ค๋ฅธ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ Branch ์ •๋ณด ํฌํ•จ)
  • Root Node : ํŠธ๋ฆฌ ๋งจ ์œ„์— ์žˆ๋Š” ๋…ธ๋“œ
  • Parent Node : ์–ด๋–ค ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋ ˆ๋ฒจ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ = ๋ถ€๋ชจ๋…ธ๋“œ
  • Child Node : ์–ด๋–ค ๋…ธ๋“œ์˜ ์ƒ์œ„ ๋ ˆ๋ฒจ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ = ์ž์‹๋…ธ๋“œ
  • Ancestor node : ์–ด๋–ค ๋…ธ๋“œ๋ณด๋‹ค ์œ„(๋ฃจํŠธ์ชฝ)์— ์œ„์น˜ํ•œ ๋…ธ๋“œ(์—ฐ๊ฒฐ๋˜ ์žˆ์–ด์•ผ ๋จ) -> 10,5๋Š” 6์˜ ์กฐ์ƒ๋…ธ๋“œ / 15๋Š” 6์˜ ์กฐ์ƒ๋…ธ๋“œ๊ฐ€ ์•„๋‹˜.
  • descendant node : ์กฐ์ƒ๋…ธ๋“œ์˜ ์—ญ -> H๋Š” F,G,I์˜ ํ›„์†๋…ธ๋“œ.
  • Sibling (Brother Node) : ๋™์ผํ•œ Parent Node๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ. = ํ˜•์ œ๋…ธ๋“œ
  • Leaf Node (Terminal Node) : Child Node๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š” ๋…ธ๋“œ. = ๋‹จ๋ง๋…ธ๋“œ
  • Level : ์ตœ์ƒ์œ„ ๋…ธ๋“œ๋ฅผ Level 0์œผ๋กœ ํ•˜์˜€์„ ๋•Œ, ํ•˜์œ„ Branch๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๊นŠ์ด๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • Depth : ํŠธ๋ฆฌ์—์„œ Node๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ Level
  • Sub Tree : ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ ํ•˜๊ณ  ๊ทธ ์ž์†์œผ๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ
  • Null Tree : ๋…ธ๋“œ์™€ ๊ฐ€์ง€๊ฐ€ ์ „ํ˜€ ์—†๋Š” ํŠธ๋ฆฌ, ๋„ ํŠธ๋ฆฌ๋ผ๊ณ ๋„ ํ•จ



Tree์˜ ํŠน์ง•

  • ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค. '์ตœ์†Œ ์—ฐ๊ฒฐ ํŠธ๋ฆฌ' ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ํŠธ๋ฆฌ๋Š” ๊ณ„์ธต ๋ชจ๋ธ์ด๋‹ค.
  • ํŠธ๋ฆฌ๋Š” DAG(Directed Acyclic Graphs, ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋Š” ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„)์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค.
  • Loop๋‚˜ Circuit์ด ์—†๋‹ค. ๋‹น์—ฐํžˆ Self-loop๋„ ์—†๋‹ค.
  • ๋…ธ๋“œ๊ฐ€ N๊ฐœ์ธ ํŠธ๋ฆฌ๋Š” ํ•ญ์ƒ N-1๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„๋‹ค.
  • ๋ฃจํŠธ์—์„œ ์–ด๋–ค ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” ์œ ์ผํ•˜๋‹ค.
  • ํ•œ ๊ฐœ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ์ด ์กด์žฌํ•˜๋ฉฐ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋Š” ํ•œ ๊ฐœ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„๋‹ค.
  • ์ˆœํšŒ๋Š” Pre-order, In-order ์•„๋‹ˆ๋ฉด Post-order๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด 3๊ฐ€์ง€ ๋ชจ๋‘ DFS/BFS์•ˆ์— ์žˆ๋‹ค.
  • ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜
    • ์ด์ง„ํŠธ๋ฆฌ
    • ์Šค๋ ˆ๋“œ ์ด์ง„ ํŠธ๋ฆฌ
    • ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ
    • ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ
    • ๊ท ํ˜•ํŠธ๋ฆฌ (AVL Tree, Red Black Tree)
    • ์ด์ง„ ํž™

 


 

Binary Tree

์ด์ง„ํŠธ๋ฆฌ. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ํŠธ๋ฆฌ
  • ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ํŠน๋ณ„ํ•œ ํ˜•ํƒœ์˜ ํŠธ๋ฆฌ์ด๋‹ค.
  • ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ตœ๋Œ€ ๋‘ ๊ฐœ๊นŒ์ง€๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ, ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

 

Binary Tree์˜ ํŠน์ง•

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

 

Binary Tree์˜ ์ข…๋ฅ˜

์ด์ง„ํŠธ๋ฆฌ๋Š” ์ž์‹๋…ธ๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋ƒ์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 5๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

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

Untitled

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

 

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

Untitled

  • ๋†’์ด๊ฐ€ h์ด๊ณ  ๋…ธ๋“œ ์ˆ˜๊ฐ€ n๊ฐœ์ผ ๋•Œ, ์ • ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๋ฒˆํ˜ธ 1~n๋ฒˆ๊นŒ์ง€ ๋นˆ์ž๋ฆฌ๊ฐ€ ์—†๋Š” ์ด์ง„ ํŠธ๋ฆฌ
  • ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐจ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ(๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๊ณ  ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ์ด์–ด์•ผ ํ•˜๋ฉฐ), ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋Š” ์™ผ์ชฝ ๋ถ€ํ„ฐ ์ฐจ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

3. Full Binary Tree (์ • ์ด์ง„ ํŠธ๋ฆฌ) :

Untitled

  • ๋ชจ๋“  ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ๋“ค์ด ๋ชจ๋‘ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ํŠธ๋ฆฌ = Leaf Node๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ 2๊ฐœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ
  • ํ•ด๋‹น ์ฐจ์ˆ˜์— ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•…ํ•  ๋•Œ ์šฉ์ดํ•จ

 

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

  • ๋†’์ด h์— ๋Œ€ํ•œ ์ตœ์†Œ ๊ฐœ์ˆ˜์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ ํ•œ์ชฝ ๋ฐฉํ–ฅ์˜ ์ž์‹ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„ ์ด์ง„ ํŠธ๋ฆฌ
  • ์™ผ์ชฝ ํŽธํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ํŽธํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์žˆ์Œ
  • ํŽธํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ฒ€์ƒ‰์— ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์žˆ์Œ

⇒ ์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ์œ„ํ•ด ๊ท ํ˜•ํŠธ๋ฆฌ(AVLํŠธ๋ฆฌ, ๋ ˆ๋“œ-๋ธ”๋ž™ํŠธ๋ฆฌ) ๊ฐ™์€ ๋ณ€์ข…์ด ์ƒ๊ฒจ๋‚ฌ๋‹ค.

 

5. Balanced Binary Tree (๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ) :

  • ํŠธ๋ฆฌ์— ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์— ์ž๋™์œผ๋กœ ๊ทธ ๋†’์ด(๋ฃจํŠธ์—์„œ๋ถ€ํ„ฐ ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ ˆ๋ฒจ)๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋…ธ๋“œ๊ธฐ๋ฐ˜ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ
  • ์™ผ์ชฝ ๊ทธ๋ฆผ์€ ๊ท ํ˜•์ด ๋งž์ง€ ์•Š๋Š”(unbalanced) ํŠธ๋ฆฌ : ๋ฃจํŠธ → ํŠน์ • ๋…ธ๋“œ : ํ‰๊ท  3.27ํšŒ์˜ ๋…ธ๋“œ ์ ‘๊ทผ
  • ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์€ ๋™์ผํ•œ ์ž๋ฃŒ์ง€๋งŒ ํŠธ๋ฆฌ ๋†’์ด ๊ท ํ˜•์„ ๋งž์ถ˜ ์ƒํƒœ (๊ท ํ˜•์ด์ง„ํŠธ๋ฆฌ) : ํ‰๊ท  ์ด๋™ ๋น„์šฉ์ด 3.00 ๋…ธ๋“œ ์ ‘๊ทผ
  • AVLํŠธ๋ฆฌ, ๋ ˆ๋“œ-๋ธ”๋ž™ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

 


 

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

- ๋„ˆ๋น„ ์šฐ์„  ๊ฒ€์ƒ‰(BFS)

๋‚ฎ์€ ๋ ˆ๋ฒจ๋ถ€ํ„ฐ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ณ , ํ•œ ๋ ˆ๋ฒจ์—์„œ ๊ฒ€์ƒ‰์„ ๋งˆ์น˜๋ฉด ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉ๋ฒ•, ์ฆ‰ ๋งจ ์œ„์—์„œ๋ถ€ํ„ฐ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฒ•

- ๊นŠ์ด ์šฐ์„  ๊ฒ€์ƒ‰(DFS)

์ „์œ„์ˆœํšŒ : ๋…ธ๋“œ ๋ฐฉ๋ฌธ -> ์™ผ์ชฝ ์ž์‹ -> ์˜ค๋ฅธ์ชฝ ์ž์‹
์ค‘์œ„์ˆœํšŒ : ์™ผ์ชฝ ์ž์‹ -> ๋…ธ๋“œ ๋ฐฉ๋ฌธ -> ์˜ค๋ฅธ์ชฝ ์ž์‹
ํ›„์œ„์ˆœํšŒ : ์™ผ์ชฝ ์ž์‹ -> ์˜ค๋ฅธ์ชฝ ์ž์‹ -> ๋…ธ๋“œ ๋ฐฉ๋ฌธ

๋ฆฌํ”„์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์•„๋ž˜์ชฝ์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ์šฐ์„ ์œผ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋ฆฌํ”„์— ๋„๋‹ฌํ•ด์„œ ๋” ์ด์ƒ ๊ฒ€์ƒ‰ํ•  ๊ณณ์ด ์—†์œผ๋ฉด ์ผ๋‹จ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ณ  ๊ทธ ๋’ค ๋‹ค์‹œ ์ž์‹ ๋…ธ๋“œ๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค.

 


 

Binary Tree Traversal

  1. ์ „์œ„ ์ˆœํšŒ (preorder traversal) : DLR ์ˆœ์„œ๋กœ, ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—… D๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์ˆ˜ํ–‰
  2. ์ค‘์œ„ ์ˆœํšŒ (inorder traversal) : LDR ์ˆœ์„œ๋กœ, ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ/์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—… D๋ฅผ ์ž‘์—… L๊ณผ ์ž‘์—… R์˜ ์ค‘๊ฐ„์— ์ˆ˜ํ–‰
  3. ํ›„์œ„ ์ˆœํšŒ (postorder traversal) : LRD ์ˆœ์„œ๋กœ, ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—… D๋ฅผ ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ˆ˜ํ–‰

 

1. Preorder Traversal

์ „์œ„ ์ˆœํšŒ๋Š” VLR ์ˆœ์„œ๋กœ ์ˆœํšŒํ•œ๋‹ค.

  1. V : ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค
  2. L : ํ˜„์žฌ ๋…ธ๋“œ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ์ด๋™ํ•œ๋‹ค
  3. R : ํ˜„์žฌ ๋…ธ๋“œ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ์ด๋™ํ•œ๋‹ค
def preorderTraversal(self, node):
    print(node, end='')
    if not node.left  == None : self.preorderTraversal(node.left)
    if not node.right == None : self.preorderTraversal(node.right)

ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์™ผ์ชฝ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด ๊ณ„์†ํ•ด์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๊ณ  ์™ผ์ชฝ์ด ๋๋‚˜๋Š” ๋…ธ๋“œ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•œ๋‹ค.

 

 

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

์ค‘์œ„ ์ˆœํšŒ๋Š” LVR ์ˆœ์„œ๋กœ ์ˆœํšŒํ•œ๋‹ค. ์™ผ์ชฝ ์ˆœํšŒ๊ฐ€ ์šฐ์„ ์ด๊ณ  ์ถœ๋ ฅ์ด ์ค‘์•™์— ์œ„์น˜ํ•œ๋‹ค.

def inorderTraversal(self, node):
    if not node.left  == None : self.inorderTraversal(node.left)
    print(node, end='')
    if not node.right == None : self.inorderTraversal(node.right)

 

 

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

ํ›„์œ„ ์ˆœํšŒ๋Š” LRV๋กœ ์ˆœํšŒํ•œ๋‹ค. ์ถœ๋ ฅ์ด ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ๋‹ค.

def postorderTraversal(self, node):
    if not node.left  == None : self.postorderTraversal(node.left)
    if not node.right == None : self.postorderTraversal(node.right)
    print(node, end='')

 

 


 

Binary Tree์˜ ํ‘œํ˜„๋ฐฉ๋ฒ•

1. ๋ฐฐ์—ด

1-1. 1์ฐจ์› ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

์™„์ „์ด์ง„ํŠธ๋ฆฌ์˜ ์ˆœ์„œ์™€ ๋™์ผํ•˜๊ฒŒ ์ธ๋ฑ์‹ฑํ•œ๋‹ค. ํŽธ์˜์ƒ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

1-2. 2์ฐจ์› ๋ฐฐ์—ด์— ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• (์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ)

๋ชจ๋“  ํŠธ๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ, ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹์„ ๊ฐ–๋Š” ํŠธ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค. A[i][0]์€ ์™ผ์ชฝ ์ž์‹, A[i][1]์€ ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ์˜๋ฏธํ•œ๋‹ค.


์žฅ์  : ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ ์ƒ‰์ธ์— ์˜ํ•ด ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐฐ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ์„ ๋•Œ ์šฉ์ดํ•œ ํŠธ๋ฆฌ ๊ด€๋ จ ์—ฐ์‚ฐ๋„ ์กด์žฌํ•œ๋‹ค.
๋‹จ์  : ํŠน์ • ํŠธ๋ฆฌ์—์„œ ๊ธฐ์–ต ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณต๊ฐ„ ๋‚ญ๋น„์˜ ์‹ค์ œ ์˜ˆ์‹œ

 

2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„

  • ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•
  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์—์„œ๋Š”, ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ์™€ ๋ฆฌ์ŠคํŠธ์˜ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๊ฐ€ ์ผ์น˜
  • ⇒ ๊ตฌํ˜„๊ณผ ๊ด€๋ จ๋œ ์ง๊ด€์ ์ธ ์ดํ•ด๊ฐ€ ๋” ์ข‹์€ ํŽธ
  • ์™ผ์ชฝ ์ž์‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ํ•„๋“œ, ์š”์†Œ ํ•„๋“œ, ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋…ธ๋“œ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ชจ๋“  ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋“ค์€ ๋ฐ์ดํ„ฐํƒ€์ž…์ด binaryTreeNode์ธ ์˜ค๋ธŒ์ œ๋กœ ํ‘œํ˜„๋œ๋‹ค.
  • ํ•„์š”ํ•œ ๊ณต๊ฐ„ : n * sizeof(binaryTreeNode)     

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