[TIL] ์๋ฃ๊ตฌ์กฐ : ํธ๋ฆฌ, ๊ทธ๋ํ, ์ด์งํ์ํธ๋ฆฌ
๐๐ป ํธ๋ฆฌ Tree
- ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ์๋์ ์๋ ํ๋ ์ด์์ ๋ฐ์ดํฐ์ ๋ฌด๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒจ๋ ๊ณ์ธต์ ์๋ฃ๊ตฌ์กฐ
- ๊ทธ๋ํ ์ค ๋จ๋ฐฉํฅ ๊ทธ๋ํ๋ก ํ๋์ ๋ฟ๋ฆฌ๋ก๋ถํฐ ๊ฐ์ง๊ฐ ์ฌ๋ฐฉ์ผ๋ก ๋ป์ ํํ
- ๊ณ์ธต์ , ๋น์ ํ๊ตฌ์กฐ
- ex) ํ์ผ ํ์๊ธฐ, ๊ฐ๊ณ๋, ์กฐ์ง๋, ์ถ๊ตฌ ๋์งํ ๋ฑ
โช๏ธ ๋ฃจํธ Root
- ํ๋์ ๊ผญ์ง์ ๋ฐ์ดํฐ๋ก ๋ฃจํธ๋ฅผ ์์์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ (edge)๋ก ์ฐ๊ฒฐ
โช๏ธ ๋ ธ๋ Node
- ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ ธ๋๋ก ํ๋ฉฐ ๋ ๋ ธ๋๊ฐ ์ํ๋ก ์ฐ๊ฒฐ๋๋ฉด ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง
โช๏ธ ๋ฆฌํ Leaf
- ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ ์ง์ ์ผ๋ก ์์ ๋ ธ๋๊ฐ ์์
๐ ํธ๋ฆฌ ๋ฉ์๋
โ addChildNode(value)
- ์ ๋ ฅ๋ฐ์ value๋ฅผ ๊ณ์ธต์ ์ผ๋ก ์ถ๊ฐ
โก removeChildNode(node)
- ์ ๋ ฅ๋ฐ์ ๋ ธ๋๋ฅผ ์ญ์
โข getChildrenNode()
- ํ์ฌ ํธ๋ฆฌ์ ์กด์ฌํ๋ children ๋ฆฌํด
โฃ contains(value)
- ํธ๋ฆฌ์ ํฌํจ๋ ๋ฐ์ดํฐ ์ฐพ๊ธฐ
๐๐ป ๊ทธ๋ํ Graph
- ์ฌ๋ฌ ๊ฐ์ ์ ๋ค์ด ์๋ก ๋ณต์กํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ ๊ด๊ณ
- ex) ํฌํธ์ฌ์ดํธ ๊ฒ์์์ง, SNS ์ ์ธ๊ฐ๊ด๊ณ, ๋ด๋น๊ฒ์ด์ ๋ฑ
- ๊ฐ์ ์ ํน์ ์ ์ ์ด ์ด์ด์ ธ์๋ค๋ ์ฌ์ค๋ง ์๋ ค์ค ๋ฟ ๊ทธ ์ธ ์ ๋ณด๋ ํ์ ํ ์ ์์ ( = ๋น๊ฐ์ค์น ๊ทธ๋ํ )
- ๋น๊ฐ์ค์น ๊ทธ๋ํ์ ๋ ์์ธํ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ ์ ์ฐ๊ฒฐ ์ ๋๋ฅผ ํํํ ๊ทธ๋ํ ( = ๊ฐ์ค์น ๊ทธ๋ํ )
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ ? ๋ด๋น๊ฒ์ด์ ์ฒ๋ผ ์๋ฐฉํฅ์ผ๋ก ๊ฐ์ ์ ํํ ( ์ผ๋ฐํตํ๊ณผ ๊ฐ์ ๊ฒฝ์ด์ ๋จ๋ฐฉํฅ )
โช๏ธ ์ ์ Vertex
- ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ทธ๋ํ์ ๊ธฐ๋ณธ ์์์ด์ ๋ ธ๋
โช๏ธ ๊ฐ์ edge
- ์ ์ ์ ์ด์ด์ฃผ๋ฉฐ ์ ์ ๊ฐ ๊ด๊ณ๋ฅผ ๋ํ๋
โช๏ธ ์ธ์ ์ ์ adjacent vertex
- ํ๋์ ์ ์ ์์ ๊ฐ์ ์ ์ง์ ์ฐ๊ฒฐ๋ ์ ์
โช๏ธ ์ง์ ์ฐจ์ / ์ง์ถ ์ฐจ์ in-degree / out-degree
- ํ ์ ์ ์ ์ง์ / ์ง์ถํ๋ ๊ฐ์ ์ด ๋ช ๊ฐ์ธ์ง ๋ํ๋
โช๏ธ ์๊ธฐ ๋ฃจํ self loop
- ๋ค๋ฅธ ์ ์ ์ ๊ฑฐ์น์ง ์๊ณ ๊ฐ์ ์ด ์๊ธฐ ์์ ์๊ฒ ์ง์ ํ ๋ ์
โช๏ธ ์ฌ์ดํด cycle
- ํ ์ ์ ์์ ์ถ๋ฐํ์ฌ ๋ค์ ๊ทธ ์ ์ ์ผ๋ก ๋์๊ฐ ์ ์๋ ๊ฒฝ์ฐ
๐ ๊ทธ๋ํ์ ํํ๋ฐฉ์
โช๏ธ ์ธ์ ํ๋ ฌ
- ์๋ก ๋ค๋ฅธ ์ ์ ๋ค์ด ์ธ์ ํ ์ํ์ธ์ง ํ์ํ 2์ฐจ์ ํ๋ ฌ
- ๋ ์ ์ ์ฌ์ด์ ๊ด๊ณ๊ฐ ์๋์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉ
- ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ณ ์ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ
โช๏ธ ์ธ์ ๋ฆฌ์คํธ
- ๊ฐ ์ ์ ๋ง๋ค ์ ์ ์ด ์ด๋ค ์ ์ ๊ณผ ์ธ์ ํ๋์ง ๋ฆฌ์คํธ๋ก ํํ
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
- ์ฐ๊ฒฐ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ์ฅํ์ฌ ์๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ง์ด ์ฐจ์ง
๐ ๊ทธ๋ํ ๋ฉ์๋
โ setGraph(size)
- ๊ทธ๋ํ์ ์ฌ์ด์ฆ๋งํผ ์ ์ ์ ์ถ๊ฐํด์ผ ํจ
โก getGraph()
- ์ธ์ ํ๋ ฌ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐฐ์ด ๋ฐํ
โข addEdge(from, to)
- from์ ์ ๊ณผ to์ ์ ์ฌ์ด์ ๊ฐ์ ์ ์ถ๊ฐ
โฃ hasEdge(from, to)
- from์ ์ ๊ณผ to์ ์ ์ฌ์ด์ ๊ฐ์ ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ true/false๋ก ๋ฐํ
โค removeEdge(from, to)
- from์ ์ ๊ณผ to์ ์ ์ฌ์ด์ ๊ฐ์ ์ญ์
๐๐ป ์ด์งํ์ํธ๋ฆฌ Binary Search Tree
๐ ์ด์ง ํธ๋ฆฌ
- ์์ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ธ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ
๐ ์ด์ง ํ์ ํธ๋ฆฌ
- ๋ชจ๋ ์ผ์ชฝ ์์์ ๊ฐ์ด ๋ฃจํธ๋ ๋ถ๋ชจ๋ณด๋ค ์๊ณ ์ค๋ฅธ์ชฝ ์์ ๊ฐ์ ๋ฃจํธ๋ ๋ถ๋ชจ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง
๐ ์ด์ง ํ์ ํธ๋ฆฌ ๋ฉ์๋
โ insert(value)
- ์ ๋ ฅ๋ฐ์ ๊ฐ์ ๊ณ์ธต์ ์ผ๋ก ์ถ๊ฐ
โก contains(value)
- ํธ๋ฆฌ์ ํฌํจ๋ ๊ฐ ์ฐพ๊ธฐ
โข preorder(root, depth, list)
- ์ ์ ์ํ๋ฅผ ํตํด ํธ๋ฆฌ์ ๋ชจ๋ ์์๋ฅผ ์ ๋ ฌํ์ฌ ArrayList ํ์ ์ผ๋ก ๋ฐํ
โฃ inorder(root, depth, list)
-์ค์ ์ํ๋ฅผ ํตํด ํธ๋ฆฌ์ ๋ชจ๋ ์์๋ฅผ ์ ๋ ฌํ์ฌ ArrayList ํ์ ์ผ๋ก ๋ฐํ
โค postorder(root, depth, list)
- ํ์ ์ํ๋ฅผ ํตํด ํธ๋ฆฌ์ ๋ชจ๋ ์์๋ฅผ ์ ๋ ฌํ์ฌ ArrayList ํ์ ์ผ๋ก ๋ฐํ
๐ก์ ์ ์ํ
๐ก์ค์ ์ํ
๐กํ์ ์ํ
๐๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ํ์ ๋ฐฉ๋ฒ
โ ๋๋น ์ฐ์ ํ์ : BFS(Breathed First Search)
- ๋๋น๋ฅผ ๊ฐ์ฅ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ๋ฐฉ๋ฒ
- ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์์๋ด๋ ๊ฒ๊ณผ ์ ์ฌ
(1) ๋ฃจํธ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ ๋ถํฐ ํ์
(2) ๋ ์ด์ ํ์ํ ์ ์ ์ด ์์ ๋, ๊ทธ ๋ค์ ๋จ์ด์ ธ์๋ ์ ์ ์ ์์๋๋ก ๋ฐฉ๋ฌธ
* ์ฅ์
(1) ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ํ์ํ์ฌ ๋ต์ด ๋๋ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ต๋จ ๊ฒฝ๋ก์์ ๋ณด์ฅ
(2) ์ต๋จ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ค๋ฉด ์ด๋ ํ ๊ฒฝ๋ก๊ฐ ๋ฌดํํ ๊น์ด๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์์
(3) ๋
ธ๋ ์๊ฐ ์ ๊ณ ๊น์ด๊ฐ ์์ ํด๊ฐ ์กด์ฌํ ๋ ์ ๋ฆฌ
* ๋จ์
(1) ํ๋ฅผ ์ด์ฉํ์ฌ ํ์ํ ๋
ธ๋๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋
ธ๋๊ฐ ๋ง์ ์๋ก ๋ ํฐ ์ ์ฅ ๊ณต๊ฐ ํ์
(2) ๋
ธ๋ ์๊ฐ ๋์ด๋๋ฉด ํ์ํ ๋
ธ๋๊ฐ ๋ง์์ ๋นํจ์จ์
โก ๊น์ด ์ฐ์ ํ์ : DFS(Depth First Search)
- ๊น์ด๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์
- ํ ์ ์ ์์ ์์ํ์ฌ ๋ค์ ๊ฒฝ๋ก๋ก ๋์ด๊ฐ๊ธฐ ์ ํด๋น ๊ฒฝ๋ก๋ฅผ ์๋ฒฝํ๊ฒ ํ์
- BFS ๋ณด๋ค ํ์ ์๊ฐ์ ๊ฑธ๋ฆฌ์ง๋ง ๋ชจ๋ ๋ ธ๋๋ฅผ ์์ ํ ํ์ ๊ฐ๋ฅ
(1) ํ๋์ ๊ฒฝ๋ก๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ํ์
(2) ๋ค์ ๊ฒฝ๋ก๋ก ๋์ด๊ฐ ์ฒ์๋ถํฐ ๋๊น์ง ํ์์ ๋ฐ๋ณต
* ์ฅ์
(1) BFS์ ๋นํด ์ ์ฅ๊ณต๊ฐ์ด ํ์์ฑ์ด ์ ์
(2) ์ฐพ์์ผ ํ๋ ๋
ธ๋๊ฐ ๊น์ ๋จ๊ณ์ ์์ ์๋ก, ์ข์ธก์ ์์์๋ก BFS๋ณด๋ค ์ ๋ฆฌ
* ๋จ์
(1) ๋ต์ด ์๋ ๊ฒฝ๋ก๊ฐ ๋งค์ฐ ๊น๋ค๋ฉด ๊ทธ ๊ฒฝ๋ก์ ๊น์ด ๋น ์ง ์ฐ๋ ค๊ฐ ์์
(2) ์ฐพ์ ํด๊ฐ ์ต๋จ ๊ฒฝ๋ก๋ผ๋ ๋ณด์ฅ์ด ์์