๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/Code-States

[D+50] Graph, Tree, BST (Binary Search Tree)

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2020. 10. 26.

 

D+50

-  Graph, Tree, BST -

( Graph, Tree, BST )

 


 

 

Graph

 

 

Graph ํŠน์ง•

• ๊ทธ๋ž˜ํ”„๋Š” ๋…ธ๋“œ์™€ ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (edge)์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

 

•๋ฐฉํ–ฅ์ด ์—†๋Š” ๋ฌด๋ฐฉํ–ฅ์ด๊ฑฐ๋‚˜, ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๋Š” ๋ฐฉํ–ฅ์„ฑ ๋‘˜๋‹ค ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

   ๋ฌด๋ฐฉํ–ฅ (Undirected Graph) → ๊ฐ„์„ ์— ์˜ํ•ด ์—ฐ๊ฒฐ๋œ 2๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋Œ€์นญ์ผ ์ˆ˜ ์žˆ๋‹ค. (ex. A → B, B → A)

   ๋ฐฉํ–ฅ (Directed Graph) → ๊ฐ„์„ ์— ์˜ํ•ด ์—ฐ๊ฒฐ๋œ 2๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋น„๋Œ€์นญ์ด๋‹ค. (ex. A → B, B โ†› A)

 

์ฐจ์ˆ˜ degree

degree๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ๋œ ์—ฃ์ง€์˜ ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

์ง„์ž…์ฐจ์ˆ˜ (in-degree)

์ง„์ž…์ฐจ์ˆ˜๋Š” ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜๋กœ

์ •์ ์— ๋ถ€์†๋œ ๊ฐ„์„ ์˜ ๋ฐฉํ–ฅ์ด ๋จธ๋ฆฌ๋กœ ํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜์ด๋‹ค.

 

์ง„์ถœ์ฐจ์ˆ˜ (out-degree)

์ง„์ž…์ฐจ์ˆ˜๋Š” ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๊ฐ€๋Š” ๊ฐ„์„ ์˜ ์ˆ˜๋กœ

์ •์ ์— ๋ถ€์†๋œ ๊ฐ„์„ ์˜ ๋ฐฉํ–ฅ์ด ๊ผฌ๋ฆฌ๋กœ ํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜์ด๋‹ค.

 

ex)

A์˜ ์ง„์ž…์ฐจ์ˆ˜๋Š” 2์ด๊ณ , ์ง„์ถœ์ฐจ์ˆ˜๋Š” 1์ด๋‹ค.

B์˜ ์ง‘์ž…์ฐจ์ˆ˜๋Š” 1์ด๊ณ , ์ง„์ถœ์ฐจ์ˆ˜๋Š” 1์ด๋‹ค.

C์˜ ์ง„์ž…์ฐจ์ˆ˜๋Š” 1์ด๊ณ , ์ง„์ถœ์ฐจ์ˆ˜๋Š” 1์ด๋‹ค.

 

์ธ์ ‘ํ–‰๋ ฌ๋ฐฉ์‹๊ณผ ์ธ์ ‘๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹

์ธ์ ‘ํ–‰๋ ฌ๋ฐฉ์‹

๊ทธ๋ž˜ํ”„๋ฅผ 2์ฐจ์›ํ‘œ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ

๋…ธ๋“œ์™€ ๋…ธ๋“œ์‚ฌ์ด์— ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด 1, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0์„ ๋„ฃ์–ด ํ‘œํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

์ธ์ ‘๋ฆฌ์ŠคํŠธ๋ฐฉ์‹

๋ฐฐ์—ด๋ฐฉ์— ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ์ง‘์–ด๋„ฃ๊ณ  ๊ฐ ๋ฐฐ์—ด๋ฐฉ์— ์žˆ๋Š” ํ•ด๋‹น๋…ธ๋“œ์™€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ญ‰ ๋‚˜์—ดํ•ด์„œ ์ €์žฅํ•œ๋‹ค.

 

ex) ๋…ธ๋“œ 1์€ ๋…ธ๋“œ 2์™€ 3์ด ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

 

 


Tree

 

 

Tree ํŠน์ง•

• ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ๊ณ„์ธต์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

• ์ตœ์ƒ์œ„ ๋…ธ๋“œ(๋ฃจํŠธ)๋ฅผ ๋งŒ๋“ค๊ณ , ๋กœํŠธ ๋…ธ๋“œ์˜ child๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ทธ child์— ๊ทธ child์— ๋˜ child๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ

ํŠธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Tree ๊ด€๋ จ ์šฉ์–ด

node - ํŠธ๋ฆฌ์˜ ๊ตฌ์„ฑ์š”์†Œ

 

root - ํŠธ๋ฆฌ๊ตฌ์กฐ์—์„œ ์ตœ์ƒ์œ„์— ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ

 

depth - ๋ฃจํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ์˜ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ฑฐ๋ฆฌ

 

height - ๋กœํŠธ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ์˜ ๊นŠ์ด

 

sibling - ๊ฐ™์€ ๋ถ€๋ชจ ๊ฐ™์€ depth์— ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ

 

edge - ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์ž‡๋Š” ์„ 

 

leaf - ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ

 

 


BST ( Binary Search Tree )

 

 

BST ํŠน์ง•

• ์ตœ๋Œ€ 2๊ฐœ์˜ ์ž์‹๋งŒ์„ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ์ด๋‹ค.

 

• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—์„œ๋Š” ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ •๋ ฌ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ˆœ์„œ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ,

๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ณ 

์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฐ ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค.

 

 

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ (DFS)

ํŠน์ • ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด ๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ๋„˜์–ด๊ฐ€์ง€ ์ „์— ํ•ด๋‹น๋ถ„๊ธฐ๋ฅผ ๋งน๋ชฉ์ ์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ์ˆœํšŒํ•˜๊ธฐ

 ์ „์œ„ ์ˆœํšŒ (preorder traverse) 

   ๋ถ€๋ชจ → ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํžŒ๋‹ค.

 

 ์ค‘์œ„ ์ˆœํšŒ (inorder traverse) 

   ์™ผ์ชฝ → ๋ถ€๋ชจ → ์˜ค๋ฅธ์ชฝ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํžŒ๋‹ค.

 

 ํ›„์œ„ ์ˆœํšŒ (postorder traverse) 

   ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ → ๋ถ€๋ชจ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํžŒ๋‹ค.

 

ex)

์ „์œ„์ˆœํšŒ : 0→1→3→7→8→4→9→10→2→5→11→6

 

์ค‘์œ„์ˆœํšŒ : 7→3→8→1→9→4→10→0→11→5→2→6

 

ํ›„์œ„์ˆœํšŒ : 7→8→3→9→10→4→1→11→5→6→2→0

 

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

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

   ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ 0๊ฐœ๋‚˜ 2๊ฐœ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ

 

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

   ์™ผ์ชฝ์ž์‹๋…ธ๋“œ๋ถ€ํ„ฐ ์ฑ„์›Œ์ง€๋ฉฐ ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ฑ„์›Œ์ ธ์žˆ๋Š” ํŠธ๋ฆฌ

 

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

   ๋ชจ๋“  leaf๋…ธ๋“œ๊ฐ€ ๋˜‘๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ํŠธ๋ฆฌ

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€