νλμ λΏλ¦¬λ‘λΆν° κ°μ§κ° μ¬λ°©μΌλ‘ λ»μ ννκ° λ무λ₯Ό κ±°κΎΈλ‘ λ€μ§μ΄ λμ λ―ν νν
(λ¨λ°©ν₯ κ·Έλνμ ν ꡬ쑰) β μ¬μ΄ν΄μ΄ μμ
( 루νΈ(λ무μ λΏλ¦¬)λ₯Ό μμμΌλ‘ μ¬λ¬κ°μ λ°μ΄ν°λ₯Ό κ°μ (edge)(λ무μ κ°μ§λ€)μΌλ‘ μ°κ²° )
κ³μΈ΅μ μλ£κ΅¬μ‘° β ν λ°μ΄ν°κ° λ°λ‘ μλμ μλ νλ μ΄μμ λ°μ΄ν°μ 무방ν₯μΌλ‘ μ°κ²°λμ΄ μμ
λ κ°μ λ Έλκ° μν κ³μΈ΅μΌλ‘ μ°κ²°λλ©΄ λΆλͺ¨/μμ κ΄κ³
λΉμ ν ꡬ쑰 β νλμ λ°μ΄ν° μλμ μ¬λ¬ κ°μ λ°μ΄ν°κ° μ‘΄μ¬
π‘ μ ν ꡬ쑰μ λΉμ ν ꡬ쑰μ μ°¨μ΄
β νΈλ¦¬ ꡬν λ©μλ
addChildNode(value)
- μ λ ₯λ°μ valueλ₯Ό Treeμ κ³μΈ΅μ μΌλ‘ μΆκ°
β removeChildNode(node)
- μ λ ₯λ°μ nodeλ₯Ό Treeμμ μμ
β getChildrenNode()
- νμ¬ νΈλ¦¬μμ μ‘΄μ¬νλ childrenμ 리ν΄
β contains(value)
- νΈλ¦¬μ ν¬ν¨λ λ°μ΄ν°κ° μλμ§λ₯Ό Boolean νμ μΌλ‘ 리ν΄
β κΉμ΄ (depth)
- 루νΈλ‘λΆν° νμ κ³μΈ΅μ νΉμ λ ΈλκΉμ§μ κΉμ΄(depth)
- 루νΈ(맨μ)λ κΉμ΄κ° 0μ΄κ³ λ°μΌλ‘ ν λ λ²¨μ© λ΄λ €κ° μλ‘ κΉμ΄ 1μ¦κ°
β λ 벨(Level)
- νΈλ¦¬ ꡬ쑰μμ κ°μ κΉμ΄λ₯Ό κ°μ§κ³ μλ λ Έλλ₯Ό λ 벨(level)λ‘ ννκ°λ₯
- 루νΈ(맨μ)λΆν° λ 벨1, κΉμ΄κ° λ΄λ €κ° μλ‘ λ 벨2,3,4 ..λ‘ μ¦κ°
β λμ΄(Height)
- 리ν λ Έλ(κ° λ Έλμ 맨 μλ)λ₯Ό κΈ°μ€μΌλ‘ 루νΈκΉμ§μ λμ΄(height)λ₯Ό νν κ°λ₯
- λΆλͺ¨ λ Έλ λμ΄ = μμ λ Έλμ κ°μ₯ λμ height κ° + 1
- 리ν λ Έλμ λμ΄λ 0μ΄κ³ μλ‘ ν λ λ²¨μ© μ¬λΌκ° μλ‘ λμ΄ 1 μ¦κ°
β
Ex. λνμ μΌλ‘ νμΌ(λλ ν 리) ꡬ쑰, μλμ»΅ ν λλ¨ΌνΈ λμ§ν, 쑱보, νμ¬μ μ‘°μ§λ λ±
( ν΄λλ νλμ ν΄λ(λ£¨νΈ ν΄λ, /)μμ μμλμ΄, κ°μ§λ₯Ό λ»μ΄λκ°λ λͺ¨μμ )
βοΈ μ©μ΄
λ Έλ(Node)
- νΈλ¦¬ ꡬ쑰λ₯Ό μ΄λ£¨λ λͺ¨λ κ°λ³ λ°μ΄ν°λ£¨νΈ(Root)
- νΈλ¦¬ ꡬ쑰μ μμμ μ΄ λλ λ Έλ (맨 μ λ Έλ)리ν(Leaf)
- νΈλ¦¬ ꡬ쑰μ λ μ§μ , μμ λ Έλκ° μλ λ Έλ (맨 μλ λ Έλ)λΆλͺ¨ λ Έλ(Parent node)
- λ λ Έλκ° μνκ΄κ³λ‘ μ°κ²°λμ΄ μμ λ, μλμ μΌλ‘ 루νΈμμ κ°κΉμ΄ λ Έλ
( μνκ΄κ³ μ€ μμ λ Έλ )μμ λ Έλ(Child node)
- λ λ Έλκ° μνκ΄κ³λ‘ μ°κ²°λμ΄ μμ λ μλμ μΌλ‘ 루νΈμμ λ¨Ό λ Έλ
( μνκ΄κ³ μ€ νμ λ Έλ )νμ λ Έλ(Sibling Node)
- κ°μ λ 벨μ λλν μλ λ ΈλμλΈ νΈλ¦¬(Sub tree)
- rootμμ λ»μ΄ λμ€λ ν° νΈλ¦¬μ λ΄λΆμ, νΈλ¦¬ ꡬ쑰λ₯Ό κ°μΆ μμ νΈλ¦¬
μμ λ Έλκ° μ΅λ λ κ°μΈ λ Έλλ€λ‘ ꡬμ±λ νΈλ¦¬ ( μΌμͺ½ μμ λ Έλ / μ€λ₯Έμͺ½ μμ λ Έλλ‘ κ΅¬λΆ )
μ΄μ§ νμ νΈλ¦¬μ λ€λ₯΄κ² λ Έλκ°μ λμκ΄κ³λ μ κ²½ X
μλ£μ μ½μ , μμ λ°©λ²μ λ°λΌ μ μ΄μ§ νΈλ¦¬(Full binary tree), μμ μ΄μ§ νΈλ¦¬(Complete binary tree), ν¬ν μ΄μ§ νΈλ¦¬(Perfect binary tree)λ‘ λλ¨
β μμ λ Έλκ° μμ μκ±°λ, μ΅λ λλΏμΈ νΈλ¦¬ ( μμμ νλλ§ κ°μ§ λ Έλκ° μμ΄μΌ ν¨ )
β λ§μ§λ§ λ 벨μ μ μΈν λͺ¨λ μλΈνΈλ¦¬μ λ λ²¨μ΄ κ°κ³ , λ§μ§λ§ λ 벨μ μ λΆ μ°¨ μμ§ μμλ λμ§λ§ μΌμͺ½λΆν° μ±μμ Έ μμ΄μΌ νλ νΈλ¦¬
β λͺ¨λ 리ν λ
Έλμ λ λ²¨μ΄ κ°κ³ , λΉκ³΅κ° μμ΄ λͺ¨λ λ
Έλκ° 2κ°μ μμμ κ°κ³ μλ νΈλ¦¬ ( μλ²½ν νΌλΌλ―Έλ νν )
β μ μ΄μ§ νΈλ¦¬μ΄λ©΄μ μμ μ΄μ§ νΈλ¦¬μΈ κ²½μ°
λμ΄κ° h μΌλ μ΅λ λ Έλμ μλΒ 2^(h+1) -1Β κ°μ΄λ€ μ΄λ μ΄μ§νΈλ¦¬μμ μ΅λ λ Έλμ μλ₯Ό λ§μ‘±νλ νΈλ¦¬λ₯Ό ν¬ν μ΄μ§νΈλ¦¬λΌ νλ€Β (ex - λμ΄κ° 3μΈκ²½μ° μ΅λ λ Έλ μ : 2^6 - 1 =Β 15)
νμμ μν μ΄μ§ νΈλ¦¬
λͺ¨λ μΌμͺ½ μμμ κ°μ΄ 루νΈλ λΆλͺ¨λ³΄λ€ μκ³ , λͺ¨λ μ€λ₯Έμͺ½ μμμ κ°μ΄ 루νΈλ λΆλͺ¨λ³΄λ€ ν° κ°μ κ°μ§
μ¬λ¬κ°μ μ λ€μ΄ μλ‘ λ³΅μ‘νκ² μ°κ²°λμ΄ μλ κ΄κ³λ₯Ό ννν μλ£κ΅¬μ‘° (볡μ‘ν λ€νΈμν¬λ§)
μ§μ μ μΈ κ΄κ³μ κ²½μ°, λ μ μ¬μ΄λ₯Ό μ΄μ΄μ£Όλ μ μ΄ μμ
κ°μ μ μΈ κ΄κ³μ κ²½μ°, λͺ κ°μ μ κ³Ό μ μ κ±Έμ³ μ΄μ΄μ§
( νΈλ¦¬λ κ·Έλνμ ν μ’ λ₯ )
β κ·Έλν ꡬν λ©μλ
Arrays.deepToString()
- λ€μ°¨μ λ°°μ΄(λ°°μ΄μ΄ λ λ€λ₯Έ λ°°μ΄μ μμλ‘ κ°μ§κ³ μλ λ°°μ΄)μ StringμΌλ‘ λ³ν β 2μ°¨μ λ°°μ΄μ κ°μ μΆλ ₯νκΈ° μ’μ
( 2μ°¨μ λ°°μ΄ = 1κ°μ λ°°μ΄ μμ μμλ‘μ λ€λ₯Έ λ°°μ΄μ κ°μ§κ³ μλ νν )
β setGraph(size)
- κ·Έλνμ sizeλ§νΌμ λ²ν μ€ μΆκ°
β getGraph()
- μΈμ νλ ¬ μ λ³΄κ° λ΄κΈ΄ λ°°μ΄ λ°ν
β addEdge(from, to)
- fromVertexμ toVertex μ¬μ΄ κ°μ μΆκ°
β addEdge(κ°μ)
- μ μ μΆκ°
β hasEdge(from, to)
- fromVertexμ toVertex μ¬μ΄μ κ°μ μ΄ μ‘΄μ¬νλμ§ μ¬λΆ BooleanμΌλ‘ λ°ν (μμΌλ©΄ true / μμΌλ©΄ false)
β removeEdge(from, to)
- fromVertexμ toVertex μ¬μ΄ κ°μ μμ
Ex.
matrix[v][w] = 1 : μ μ vμμ μ μ wλ‘ κ°λ κ°μ μ΄ μμ
matrix[v][w] = 0 : μ μ vμμ μ μ wλ‘ κ°λ κ°μ μ΄ μμ
matrix.length (matrix νμ κΈΈμ΄) = matrix[i].length (matrix iνμ μ΄(μμλ€)μ κΈΈμ΄)
βοΈ μΈμ νλ ¬μ΄ μ¬μ©λλ κ²½μ°
- λ μ μ μ¬μ΄μ κ΄κ³κ° μλμ§, μλμ§ νμΈ
Ex. Aμμ Bλ‘ μ§μΆνλ κ°μ μ΄ μλμ§ νμ νκΈ° μν΄ β 0 λ²μ§Έ μ€μ 1 λ²μ§Έ μ΄μ μ΄λ€ κ°μ΄ μ μ₯λμ΄μλμ§ λ°λ‘ νμΈ κ°λ₯- κ°μ₯ λΉ λ₯Έ κ²½λ‘(shortest path)λ₯Ό μ°Ύκ³ μ ν λ μ£Όλ‘ μ¬μ©
βοΈ μΈμ 리μ€νΈκ° μ¬μ©λλ κ²½μ°
- λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©νκ³ μΆμ λ μ¬μ©
( μΈμ νλ ¬μ μ°κ²° κ°λ₯ν λͺ¨λ κ²½μ°μ μλ₯Ό μ μ₯νκΈ° λλ¬Έμ μλμ μΌλ‘ λ©λͺ¨λ¦¬ λ§μ΄ μ°¨μ§ )
βοΈ μ©μ΄
μ μ (vertex)
- λ°μ΄ν°κ° μ μ₯λλ κ·Έλνμ κΈ°λ³Έ μμ ( λ Έλ(node) )κ°μ (edge)
- μ μ μ μ΄μ΄μ£Όλ μμΈμ μ μ (adjacent vertex)
- νλμ μ μ μμ κ°μ μΌλ‘ μ§μ μ°κ²°λμ΄ μλ μ μ κ°μ€μΉ κ·Έλν (weighted Graph)
- μ°κ²°μ κ°λ(μΆκ°μ μΈ μ 보)κ° μΌλ§λ λλμ§ μ νμ Έ μλ κ·ΈλνλΉκ°μ€μΉ κ·Έλν (unweighted Graph)
- μ°κ²°μ κ°λκ° μ νμ Έ μμ§ μλ κ·Έλν무방ν₯ κ·Έλν (undirected graph)
- λͺ¨λ κ°μ μ΄ λ°©ν₯μ΄ μμ΄ ννλμ΄μλ κ·Έλν ( κ° μ μ μ΄ μλ€κ°λ€ κ°λ₯ )
Ex. μ μ vμ μ μ wλ₯Ό μ°κ²°νλ κ°μ μ (v, w)λΌκ³ νλ©΄, (v, w)μ (w, v)λ κ°μ κ°μ .
μ μ nκ°μΌ λ 무방ν₯ κ·Έλνκ° κ°μ§ μ μλ μ΅λ κ°μ μλ n(n-1)/2κ°λ°©ν₯ κ·Έλν (directed graph)
- λͺ¨λ κ°μ μ΄ λ°©ν₯μ΄ ννλμ΄ μλ κ·Έλν ( λ¨λ°©ν₯μΌλ‘λ§ μ§μΆ κ°λ₯ )
Ex. μ μ vμμ wλ‘ κ°λ κ°μ μ (v, w)λΌκ³ νκ³ , μ΄λλ κ°μ (w, v)μ λ€λ¦.
μ μ nκ°μΌ λ λ°©ν₯ κ·Έλνκ° κ°μ§ μ μλ μ΅λ κ°μ μλ n(n-1)κ°μ§μ μ°¨μ (in-degree)
/μ§μΆμ°¨μ (out-degree)
- ν μ μ μ μ§μ (λ€μ΄μ€λ κ°μ )νκ³ μ§μΆ(λκ°λ κ°μ )νλ κ°μ μ΄ λͺ κ°μΈμ§μΈμ (adjacency)
- λ μ μ κ°μ κ°μ μ΄ μ§μ μ΄μ΄μ Έ μλ€λ©΄ μ΄ λ μ μ μ μΈμ ν μ μ μκΈ° 루ν (self loop)
: μ μ μμ μ§μΆνλ κ°μ μ΄ λ€λ₯Έ μ μ μ κ±°μΉμ§ μκ³ , 곧λ°λ‘ μκΈ° μμ μκ² μ§μ νλ κ²½μ° ( μκΈ° 루νλ₯Ό κ°μ‘λ€ )μ¬μ΄ν΄ (cycle)
- ν μ μ μμ μΆλ°νμ¬ λ€μ ν΄λΉ μ μ μΌλ‘ λμκ° μ μλ κ²½μ° (μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ κ·Έλν λΌκ³ ν¨)
[μ°Έκ³ ] https://www.softwaretestinghelp.com/java-graph-tutorial/
μ΄λ² νμ΅μ Coplit λ¬Έμ λ€μ μ§μ€νλ€κ° μκ°μ΄ μμ΄ λΉμΌμ λΈλ‘κ·Έλ₯Ό μμ±νμ§ λͺ»νλ€γ
κ·Έλλ μ£Όλ§μ 볡μ΅νλ©΄μ λ€μ νλ² κ°λ
μ μ΄ν΄νλ€!
νμ§λ§ Stack, Queueμ κ°μ΄ λ§μ λ¬Έμ λ₯Ό λ§λλ©΄ μ μμ©νμ§ λͺ»ν κ² κ°λ€..γ
미리 νμ΄λ΄μΌμ§ γ
γ