β 1. μ€λ λ νΈλ¦¬ κ°λ
(1) μ€λ λ νΈλ¦¬λ?
[ κΈ°μ‘΄ μ΄μ§ νΈλ¦¬μ λ¨μ ]
- μ΄μ§ νΈλ¦¬: κ° λ Έλκ° λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ΅λ λ κ°μ μμ λ Έλλ₯Ό κ°λ μλ£κ΅¬μ‘°μ.
- ( λν, μΌλ° μ΄μ§ νΈλ¦¬λ μ¬κ· λλ μ€νμ μ΄μ©ν΄ ꡬνμ ν μ μμ. )
- κΈ°μ‘΄ μ΄μ§ νΈλ¦¬μμ μ λ Έλμ left/right ν¬μΈν°κ° νμ NULL μ΄κΈ° λλ¬Έμ μν(μ μ, μ€μ, νμ λ°©μ)λ₯Ό ν λ, μ΄μ μ λ Έλλ‘ λμκ°μΌ νλ κ²½μ°κ° μλλ° μ΄λ, μ¬κ· νΈμΆλ§λ€ ν¨μ νΈμΆ μ€νμ΄ μμ΄λ λ¬Έμ μ μ΄ λ°μν¨.
- μ€ν μ€λ²ν€λ: νΈλ¦¬κ° κΉκ±°λ λ Έλ μκ° λ§μμ§λ©΄ μ€ν μ€λ²νλ‘μ°κ° λ°μ ν κ°λ₯μ±μ΄ λμμ§.
- μ€ν μλ: ν¨μ νΈμΆ/λ³΅κ· λΉμ©μ΄ λ°λ³΅λμ΄ μ€ν μλκ° λλ €μ§ μ μμ.
[ μ€λ λ νΈλ¦¬ ]
- μ€λ λ νΈλ¦¬: μμ κ°μ΄ μ΄μ§ νΈλ¦¬μ λ¨μ μ 보μνκ³ μ, κΈ°μ‘΄ μ΄μ§ νΈλ¦¬μ NULL ν¬μΈν°λ₯Ό νμ©νμ¬ μν κ²½λ‘λ₯Ό μ°κ²°ν¨μΌλ‘μ¨, μ€νμ΄λ μ¬κ·μ κ°μ΄ λλμκ°μ§ μκ³ μ°κ²° λ ννλ‘ λ€μμΌλ‘ λμ΄κ° μ μκ² λ§λ€μ΄ λμ μλ£κ΅¬μ‘°μ.
- μ¦, μ€λ λ νΈλ¦¬μ ν΅μ¬ λͺ©μ μ μν μ μ€νμ΄λ μ¬κ· νΈμΆμ μ¬μ©νμ§ μκ³ λ€μ λ Έλλ₯Ό μ°Ύμκ° μ μλλ‘ νλ κ²μ.
(2) μ€λ λ νΈλ¦¬ ꡬν μμ - ν¬μΈν° νλ μΆκ° λ°©μ(λ μΌλ°μ μΈ λ°©μμ)
- μ€λ λ νΈλ¦¬λ μ΄μ§ νΈλ¦¬ λ Έλμ νλλ₯Ό left_thread, right_thread λ κ°λ₯Ό μΆκ°ν¨μΌλ‘μ¨, λ€μ / μ΄μ μν λ Έλλ₯Ό μ§μ 카리ν€κ² νλ λ°©μμ΄λ€.

- left_thread: μΌμͺ½ μμμ΄ μμ λ μ€μ μνμμ μ΄μ λ Έλλ₯Ό κ°λ¦¬ν€λ μ©λ
- right_thread: μ€λ₯Έμͺ½ μμμ΄ μμ λ λ€μ λ Έλλ₯Ό κ°λ¦¬ν€λ μ©λ
- μ΄ λ°©μμ κΈ°μ‘΄ μ΄μ§ νΈλ¦¬μ μ λ Έλμ left, right νλκ° NULL μΈ κ²½μ°μ left_thread, right_thread λ₯Ό μ°Έμ‘°νκ² ν¨μΌλ‘μ¨, κΈ°μ‘΄μ μ€νμ μμμ λμκ°λ μ¬κ· ꡬ쑰λ₯Ό λ¨μν λ€μμΌλ‘ λμ΄κ°λ μν κ΅¬μ‘°λ‘ λ°κΏ μ μμ.
- μ΄ κ΅¬μ‘°λ μ€λ λ νΈλ¦¬κ° NUL ν¬μΈν° κ³΅κ° μ¬νμ©μ΄λΌλ λ³Έλμ λͺ©μ μ λ¬μ±νμ§ λͺ»ν΄μ λ μΌλ°μ μΈ λ°©μμ΄λ¨.
- μ΄λ»κ² 보면 μλͺ»λ λ°©μμΌλ‘ λ³Ό μ μμΌλ©°, ν¬μΈν° νλμ μΆκ°λ‘ λ©λͺ¨λ¦¬ ν¨μ¨μ±μ΄ ν¬κ² λ¨μ΄μ§κ² λ¨.
(3) μ€λ λ νΈλ¦¬ μ¬μ© μ΄μ
[ μ€λ λ νΈλ¦¬ μ¬μ© μ΄μ μμ ]

- μμ κ°μ΄ κΈ°μ‘΄μ μ΄μ§νΈλ¦¬λ μ€μ μνμ κ²½μ° μΌμͺ½ μλΈνΈλ¦¬λ₯Ό λ€ λκ³ λλ©΄ λΆλͺ¨λ‘ λλμμμΌνλ ꡬ쑰μ.
- νμ§λ§, νΈλ¦¬ ꡬ쑰μμλ λΆλͺ¨λ‘ λμκ°λ ν¬μΈν°κ° μκ³ λ΄λ €κ°λ ν¬μΈν°λ§ μ‘΄μ¬ν¨.
- κ·Έλμ κΈ°μ‘΄ μ΄μ§ νΈλ¦¬λ μ€νμ ν΅ν΄ μ¬κ· νΈμΆμ νλ λ°©μμ μ΄μ©ν΄μ λλμμμμ.
- μ¦, “λ°©λ¬Ένμ§ μκ³ μ§λμ³ μ¨ λ Έλλ₯Ό κΈ°μ΅νκΈ° μν΄ μ€νμ μ μ₯ν΄μΌ νλ λ²κ±°λ‘μμ΄ λ°μνλ€.”λ λ¨μ μ΄ μμ.
[ μ€μ μν μ ꡬν λ°©λ² μμ ]
- μΌμͺ½ μμμ΄ μλ κ²½μ°: κ·Έ μΌμͺ½ λ§ν¬λ₯Ό μ€μ μν μ, μκΈ°λ³΄λ€ μ΄μ λ Έλ(predecessor) λ‘ μ°κ²°
- μ€λ₯Έμͺ½ μμμ΄ μλ κ²½μ°: κ·Έ μ€λ₯Έμͺ½ λ§ν¬λ₯Ό μ€μ μν μ, μκΈ°λ³΄λ€ λ€μ λ Έλ(successor) λ‘ μ°κ²°
- μ΄λ κ² νλ©΄ μ€μ μνν λ μ€νμ΄λ μ¬κ· μμ΄λ λ°λ‘ λ€μ λ Έλλ₯Ό μ°Ύμ μ μμ.
(4) μ€λ λ νΈλ¦¬ μν

- μ€λ λ: μ€λ λ νΈλ¦¬μμ μ€λ λμ μλ―Έλ μν λ°©λ²μ λ°λ₯Έ λ°©λ¬Έμμλ₯Ό μ μ§νλ ν¬μΈν°μ΄λ€.
- μνλ κΈ°μ‘΄μ μ΄μ§ νΈλ¦¬μ λμΌνκ² μ μ, μ€μ, νμ μνλ₯Ό λνμ μΌλ‘ μ¬μ©ν¨.
- κΈ°μ‘΄ μ΄μ§ νΈλ¦¬: ν΄λΉ μνμμ μ€νμ μ¬μ©ν μ¬κ·νΈμΆ
- μ€λ λ νΈλ¦¬: μ€λ λ νλλ₯Ό νμ©ν΄ μν λ°©λ²μ λ°λΌ λ°©λ¬Έ μμμ λ§κ² λ€μμΌλ‘ λμ΄κ°λ λ°©μμ.
β 2. μ€λ λ νΈλ¦¬ ꡬν - ν¬μΈν° νλμ μΆκ° λ°©μ
(1) ν¬μΈν° νλμ μΆκ° λ°©μμ΄λ?
- ν¬μΈν° νλμ μΆκ°: μ€λ λλ₯Ό μ μ₯νλ ν¬μΈν°λ₯Ό μΆκ°νλ κ²μ μλ―Έν¨.
- μΌμͺ½ μ€λ λ ν¬μΈν°, μΌμͺ½ μμ ν¬μΈν°, λ°μ΄ν°, μ€λ₯Έμͺ½ μμ ν¬μΈν°, μ€λ₯Έμͺ½ μ€λ λ ν¬μΈν° νλλ‘ λ Έλ ꡬ쑰λ₯Ό μ μν¨.

- μ€λ₯Έμͺ½ μ€λ λ: μ ν΄μ§ μν μμμ λ°λ₯Έ κ·Έ λ Έλμ νμ λ Έλλ₯Ό κ°λ¦¬ν΄
- μΌμͺ½ μ€λ λ: κ·Έ λ Έλμ μ ν λ Έλλ₯Ό κ°λ¦¬ν΄.
(2) ν¬μΈν° νλμ μΆκ° - κ°μ²΄

- νΉμ λ Έλ κ°μ²΄μ μ μλ‘ λ³Ό μ μμΌλ©°, μ€λ λ νΈλ¦¬λ lthread, rthread λ κ°μ νλκ° μ¦κ°ν λͺ¨μ΅μΌλ‘ μ μ λ¨.
(3) ν¬μΈν° νλμ μΆκ° - μ€μ μν μ°μ°κ³Όμ μμ

- μμ μ μλ ν¬μΈν° νλλ₯Ό νμ©ν μ€μ μν μ°μ° κ³Όμ μ λνλΈ μ½λμ΄λ€.
- startNode: inoder() ν¨μμ λ§€κ°λ³μμ κ°μΌλ‘λ μνν νΈλ¦¬μ μμ λ Έλλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°μ΄λ€.
- tfNode *ptr: λ Έλλ₯Ό κ°λ¦¬ν¬ μ μλ νμ μΈ tfNode νμ μ ν¬μΈν° ptr μμ±
- ptr = startNode: μμ λ Έλλ₯Ό κ°λ¦¬ν€λλ‘ ν¨.
- while(ptr != NULL): λ°λ³΅λ¬Έμ ν΅ν΄ ptr μ΄ NULL μ΄ μλ κ²½μ°μ μ§μμ μΈ λ°λ³΅μ μꡬν¨.
- ptr = ptr -> rthread: ptr μλ startNode κ° μ²μ λ€μ΄κ° μλ κ²½μ°κ³ , μ΄νμ λ°λ³΅μ μΌλ‘ ν΄λΉ λ Έλμ rthread μ νλκ°μΈ rthread μ μ£Όμκ°μ μ°Έμ‘°νκ² λλ€. μ΄ν, ptr μ λ£μ΄μ£Όκ² λ¨.
- κ²°κ³Όμ μΌλ‘ μν μ°κ²° 리μ€νΈμ²λΌ μ λ Έλ νλμ μ£Όμκ°μ΄ NULL μ΄ μλ μ£Όμκ°μ λ£κ² λμ΄, μ°Έμ‘°λ₯Ό νκ²λλ λ°©μμ.

- ν΅μ¬: μ μ, μ€μ, νμ μν μμμ λ°λΌ, μμνλ startNode κ° λ¬λΌ μ§ μ μμ.
- ( μ μλ©΄ startNode κ° root μΈ Cκ° λ κ²μ. μ€μ = startNode L , νμ = startNode L )
- μΌλ°μ μΈ νΈλ¦¬μμλ root λ₯Ό μ΄μ©ν΄ νΈλ¦¬λ₯Ό κ°λ¦¬ν€λκ² κΈ°λ³Έμ΄μ§λ§, μ€λ λ νΈλ¦¬μμλ μνμμμ λ°λΌμ μμμ μ΄ λ¬λΌμ§
(4) ν¬μΈν° νλμ μΆκ° - μ€λ λ νΈλ¦¬κ° λ§λ?
- μ΄ κ΅¬μ‘°λ μ€λ λ νΈλ¦¬κ° NULL ν¬μΈν° κ³΅κ° μ¬νμ©μ΄λΌλ λ³Έλμ λͺ©μ μ λ¬μ±νμ§ λͺ»ν΄μ λ μΌλ°μ μΈ λ°©μμ΄λ¨.
- μ΄λ»κ² 보면 μλͺ»λ λ°©μμΌλ‘ λ³Ό μ μμΌλ©°, ν¬μΈν° νλμ μΆκ°λ‘ λ©λͺ¨λ¦¬ ν¨μ¨μ±μ΄ ν¬κ² λ¨μ΄μ§κ² λ¨.
- μ¦, NULL ν¬μΈν° 곡κ°μ κ·Έλλ‘ λκ³ νλλ₯Ό μΆκ°ν κ²μ΄λ―λ‘, μ€λ λ νΈλ¦¬μ λΆμ ν©ν λͺ¨μ΅μ 보μ.
(5) ν¬μΈν° νλμ μΆκ° - ν΅μ¬

- νΈλ¦¬λ κΈ°λ³Έμ μΌλ‘ λΉμ ν ꡬ쑰λΌμ, λΆλͺ¨μμ μμμΌλ‘λ μ½κ² λ΄λ €κ° μ μμ§λ§ λ€μ μ¬λΌκ°λ건 λΆκ°λ₯ν¨.
- κ·Έλ κΈ° λλ¬Έμ λ΄λ € κ° λ λμμ¬ μμΉλ₯Ό κΈ°μ΅ν΄λ νμκ° μμ μ΄μ λ, κ·ΈλμΌ μνλ₯Ό λ μ μμΌλκΉ
- κ·Έλμ νΈλ¦¬μμ κΈ°λ³Έμ μΌλ‘ μνλ₯Ό ν λ μ¬μ©νλ λ°©λ²μ΄ μ¬κ·μ νΈμΆ λ°©μμ΄κ³ , μ΄κ±΄ Stack μΌλ‘ λ³Ό μ μμ.
- νμ§λ§, μ΄λ¬ν μ¬κ·μ νΈμΆ λλ μ€νμ μ¬μ©νλ λ°©μμ ν¨μκ° νΈμΆλ λλ§λ€ μ€ν νλ μ(λ§€κ°λ³μ, λ³΅κ· μ£Όμ λ±)μ μ μ₯ν΄μΌ νκ³ , λ Έλ μκ° λ§μΌλ©΄ λ©λͺ¨λ¦¬ λλΉ + νΈμΆ λΉμ©μ΄ μ¦κ° ν μ μλ€λ λ¨μ μ΄ μμ.
- νΉν νΈλ¦¬μ κΉμ΄κ° κΉμμλ‘ μ€λ²ν€λκ° λ°μν νλ₯ μ΄ λ§€μ° λμμ§ κ²°κ³Όμ μΌλ‘ μ€ν μ€λ²νλ‘μ°κ° λ°μν μ μμ.
- μ΄λ¬ν λ€μν λ¬Έμ μ μ ν΄κ²°νκΈ°μν΄ μ€λ λνΈλ¦¬κ° λμ€κ² λκ²μ.
- μ΄ μ€λ λ νΈλ¦¬λ, μ€ν λλ μ¬κ· μμ΄ νΈλ¦¬λ₯Ό μνν μ μλλ‘ λ§λ ꡬ쑰μ.
- μ¦, μ€λ λ νΈλ¦¬λ κΈ°μ‘΄μ νΈλ¦¬κ΅¬μ‘°μμ νλλ₯Ό μΆκ°νμ¬ μΆκ°μ μΌλ‘ λ Έλμ μ£Όμλ₯Ό μ μ₯νκ² λλ κ²μ.

- μ€λ₯Έμͺ½ μ€λ λ: μ ν΄μ§ μν μμμ λ°λ₯Έ κ·Έ λ Έλμ νμ λ Έλλ₯Ό κ°λ¦¬ν΄
- μΌμͺ½ μ€λ λ: κ·Έ λ Έλμ μ ν λ Έλλ₯Ό κ°λ¦¬ν΄.
- μ΄λ κ² κΈ°μ‘΄ λ Έλ ꡬ쑰μ μ€λ λμ© ν¬μΈν° νλ 2κ°λ₯Ό λ§λ€μ΄μ λ£κ² λ¨.
- μ¦, μ€λ λ νΈλ¦¬λ μν μ°κ²° 리μ€νΈκ° λ¨μ μ°κ²° 리μ€νΈμ ꡬ쑰λ₯Ό νμ©ν΄μ κ°μ ν κ²κ³Ό λμΌνκ² νΈλ¦¬ ꡬ쑰λ₯Ό κ°μ ν λλμ.
- κ²°κ³Όμ μΌλ‘ left λ right λ μ΄μ§ νΈλ¦¬μ ꡬ쑰λ₯Ό μ μ§νκΈ° μν΄μ νμν κ²μ΄κ³ , left_thread μ right_thread λ μν μμμΈ μ μ, μ€μ, νμμ λ°λΌμ μ£Όμκ°μ λΆμ¬νλ©΄ λλ κ²μ.
- μ¦, μ²μμλ left, right λ₯Ό ν΅ν΄μ λ΄λ €κ°κ² λλλ°, λ§μ½ left λ right κ° null μΈ κ²½μ° μμ λ Έλκ° μλ κ²½μ°λ‘ λ³΄κ³ , left_thread μ right_thread λ₯Ό ν΅ν΄μ λ€μ λ Έλλ‘ κ°κ² λλ κ²μ.
- left μ right μ μ‘΄μ¬λ λ Έλκ°μ κ΄κ³λ₯Ό λͺ ννκ² ν΄μ£Όκ³ μ½μ κ³Ό μμ λ₯Ό νλ ꡬ쑰μ μΌλ‘ λ€λ£° λμ νμν¨.
- μ½κ²λ§ν΄, left, rightλ μμ λ Έλμ μ£Όμλ₯Ό κ°μ§κ³ μμΌλ―λ‘ ν΄λΉ κ΅¬μ‘°κ° νΈλ¦¬λΌλ κ²μ μ μ μκ² ν΄μ£Όλ νλμ.
- ν¬μΈν° νλ μΆκ° λ°©μμ ꡬνμ΄ μ½μ§λ§ λ©λͺ¨λ¦¬ μ¬μ©λμ΄ νλμ λ§νΌ λμ΄λλ λ¨μ μ΄μμ.
β 3. μ€λ λ νΈλ¦¬ ꡬν - λΉ ν¬μΈν° νμ© λ°©μ
- μ€λ λ νΈλ¦¬μ ꡬν λ°©μμΌλ‘ λΉ ν¬μΈν°μ νμ©μ λνμ μΌλ‘ κ°μ₯ λ§μ΄ μ°μ΄λ μ§μ ν μ€λ λ νΈλ¦¬λ‘ λ³Ό μ μμ.
(1) λΉ ν¬μΈν° νμ© λ°©μ μ΄λ?
- κΈ°μ‘΄ μ΄μ§ νΈλ¦¬μ λ Έλ ꡬ쑰λ₯Ό κ·Έλλ‘ μ¬μ©νλ©΄μ, λ Έλμ μλ μ¬μ©νμ§ μλ ν¬μΈν°(λΉ ν¬μΈν°)λ₯Ό νμ©νλ λ°©λ²μ.
- μΆκ°μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νμ§ μμλ λλ μ₯μ μ΄ μμ§λ§, μμ€μ½λκ° λ§μ΄ 볡μ‘ν΄μ§λ€λ λ¨μ μ΄ μμ.
- μ¦, μ€λ λ νλλ₯Ό λ°λ‘ μΆκ°νμ§ μμΌλ―λ‘μ¨, μΆκ°μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νμ§ μλλ€λ μλ―Έμ.
- **νΉμ λ Έλ Xμ λν΄ μ€λ₯Έμͺ½ ν¬μΈν°κ° NULLμ΄λ©΄ μ΄ ν¬μΈν°λ₯Ό λ Έλ Xμ νν λ Έλλ₯Ό κ°λ¦¬ν€λλ‘ νλ λ°©μμ.**

- μμ κ°μ΄ μ λ Έλμ λΉ ν¬μΈν° νλλ₯Ό νμ©νλ λ°©μμ΄λ€.
- λν, λ Έλ μ΄ κ°μ: n || null ν¬μΈν° μ΄ κ°μ : n + 1 μ΄λ€.
- μ¦, λ Έλ ν¬μΈν°(λΉ ν¬μΈν°)κ° μ€μ λ Έλλ³΄λ€ ν¨μ¬ λ§μ.
- κ²°κ³Όμ μΌλ‘ null pointer λ μ€λ λλ‘ λΆλ¦¬λ©°, μ΄κ²μ νμ©νκ³ μ νλ κ²μ΄ μ€λ λ νΈλ¦¬μ.
- λν, ν΄λΉ μ€λ λ νΈλ¦¬ ꡬ쑰μμλ newNode κ° μΆκ°κ° λ λ, μ λ Έλμ κ²½μ° right ν¬μΈν°μ ννλ Έλλ₯Ό κ°λ¦¬ν€κ² μ£Όμκ°μ μ°Έμ‘°νλ λ‘μ§μ΄ ν¬ν¨μ΄ λμ΄μΌ ν¨. μ΄λ κ² λλ©΄, μνλ κ°λ¨νμ§λ§ μ½μ , μμ , μμ λ‘μ§μ΄ 볡μ‘ν΄μ§ μ μμ.
(2) λΉ ν¬μΈν° νμ© λ°©μ - ꡬλΆμ μν νκ·Έ νλ μΆκ°

- ν΄λΉ μ€λ λ νΈλ¦¬μ λΉ ν¬μΈν°κ° μ€λ λλ‘ μ¬μ© μ€μΈμ§ μλλ©΄ μλΈνΈλ¦¬μ λν μμμ κ°λ¦¬ν€λ ν¬μΈν°μΈμ§ ꡬλΆμ ν΄μ€μΌν¨.
- μ¦, μ€λ λ μ¬μ©μ¬λΆ νκ·Έ νλ(νλκ·Έ)κ° νμν¨. ( μ½μ /μμ μ°μ°μμ λ°λμ νμν¨ )
- μ΄μ λ, μ½μ μ ν΄λΉ νλκ° μμμΈμ§ μ€λ λμΈμ§ λͺ¨λ₯΄λ©΄ λ Έλ λ°μ΄ μλ νν λ Έλλ‘κ°μ λ£μ μλ μκΈ° λλ¬Έμ.
(3) λΉ ν¬μΈν°μ νμ© λ°©μ - ꡬν λ°©λ²
[ μ¬μ© ν μν λ°©μ: μ μ μν λ°©μ ]
[ 쑰건: κ° λ
Έλ μ€λ₯Έμͺ½ ν¬μΈν° νλλ₯Ό μ€λ λλ‘ μ¬μ© ]
( μ¦, right = νν λ
Έλ or left = νν λ
Έλ λ μ€ νλλ‘ κ΅¬ν )
- μ΄κ²κ³Ό κ°μ΄ λ€μν μν λ°©μκ³Ό λ€μν 쑰건μΌλ‘ ꡬνμ΄ κ°λ₯ν¨.
- μ¦, μ€λ₯Έμͺ½ ν¬μΈν°κ° νν λ Έλλ₯Ό κ°λ¦¬ν€κ² λ€λ μλ―Έμ.
- μ μ : νν λ Έλλ₯Ό κ°λ¦¬ν€λ μ ( λ Έλμ μ€λ λκ° νν λ Έλλ₯Ό κ°λ¦¬ν€λ©΄ μ μ )
- μ€μ : μ€μ μμμ κ°λ¦¬ν€λ μ ( λ Έλμ μ€λ λκ° μ€μ μμμ κ°λ¦¬ν€λ©΄ μ€μ )
- **ν΄λΉ μ μ λ°μ μ΄λ―Έμ§ μμλ₯Ό μν΄μ μ ν΄λ μμμ κ·μ μ.**
[ μ€λ λ νμ© μν λ°©λ² ]



- μμ κ°μ΄ μ€λ λλ₯Ό νμ©ν΄μ μνλ₯Ό λ μ μμΌλ©°, νλκ·Έ νλλ₯Ό λ€ μΆκ°λ₯Ό ν΄μ€μΌν¨.
β 4. μ€λ λ νΈλ¦¬ μν, μ½μ , μμ
(1) μ€λ λ νΈλ¦¬ - κ°μ²΄

- μ€λ νΈ νΈλ¦¬ λ Έλμ flag λ₯Ό μΆκ°ν κ°μ²΄λ‘ λ³Ό μ μμΌλ©°, μ΄κ²μ νλμ λ Έλλ₯Ό μλ―Ένλ€.
- threadFlag = true: μΌ κ²½μ° right μ£Όμκ°μ νν λ Έλλ₯Ό κ°λ¦¬ν€λ μ£Όμκ°μΌλ‘ λ³Έλ€.
- threadFlag = false: μΌ κ²½μ° right μ£Όμκ°μ μμ λ Έλλ₯Ό κ°λ¦¬ν€λ μ£Όμκ°μΌλ‘ λ³Έλ€.
- μμ κ°μ 쑰건μ μκ³ λ¦¬μ¦μμ ꡬννκΈ° μν΄μ flag νλλ₯Ό λ°λ‘ μΆκ°ν λ°©μμΌλ‘ λ³Ό μ μμ.
- ν΅μ¬μ μμ κ°μ κ°μ²΄λ μ€μ μν λΏλ§ μλλΌ λͺ¨λ μνμ νμν κ°μ²΄μ. λ¨μ§ μμλ₯Ό λ κ² μΌλΏμ.
(2) μ€λ λ νΈλ¦¬ - μ€μ μν μ°μ°


- (1) inorder(tfNode* root): root λ Έλμ μ£Όμκ°μ λ§€κ°λ³μλ‘ μ λ¬
- (2) tfNode* ptr = inorderStart(root): inorderStart() ν¨μ νΈμΆ λ§€κ°λ³μλ‘ root μ£Όμ μ λ¬
- (3) inorderStart(): μ€μ μνμ 첫 λ²μ§Έ Start Nodeλ₯Ό μ°Ύμμ£Όλ ν¨μμ΄λ€.
- (4) if(ptr == NULL): ptr μ¦, λκΈ΄ root μ μ£Όμκ°μ΄ NULL μΈμ§ λ³΄κ³ μλ κ²½μ° μ΄ν λ‘μ§ μν
- (5) while(ptr -> left != NULL): λ°λ³΅λ¬Έμ ν΅ν΄μ ptr κ°μ²΄μ left νλκ° κ°λ¦¬ν€λ κ°μ΄ NULL μΈμ§ νμ
- κ·Έν, left κ° λ§μ½ NULL μΈ κ²½μ° λ°λ³΅λ¬Έμ λμμ return ptr; NULL μ΄ μλ κ²½μ° κ³μ λ°λ³΅
- μ¦, right λ₯Ό νν λ Έλλ₯Ό κ°λ¦¬ν€λ μ€λ λλ‘ μ¬μ© νμΌλ―λ‘, left μ λ§μ§λ§ λΆλΆμ NULLμ΄ λ€μ΄κ° μ μμ΄μ κ°λ₯ν¨.
- (6) ptr = ptr -> left: left νλκ° null μ΄ μλ κ²½μ° left μ λ°λ³΅μ μΌλ‘ μ°Έμ‘°νκ² λ¨.
- (7) inorderStart()λ μ΅μ’ μ μΌλ‘ leftλ₯Ό μ°Έμ‘°νλ€ λ³΄λ©΄, λ§μ§λ§ NULL μΈ λΆλΆμΌλ‘ μ€μ μνμ μμμ μΌλ‘ κ° μ μμ.
- (8) tfNode* ptr = inorderStart(root): ptr μλ μ€μ μν 첫 λ²μ§Έ λ Έλμ μ£Όμκ°μ΄ λ€μ΄μ€κ² λ¨.
- (9) while(ptr != NULL): ptr 첫 λ²μ§Έ λ Έλμ μ£ΌμλΆν° NULL μ¬λΆλ₯Ό 쑰건μΌλ‘ μ€μ μν λ°λ³΅λ¬Έμ λλ¦Ό.
- (10) if(ptr -> threadFlag): ptr μ threadFlag κ° true μΈ κ²½μ° ptr = ptr -> right; ptrμ right μ£Όμκ°μ μ°Έμ‘°ν΄μ λ€μ ptrμ λ£μ΄μ£Όκ² λ¨. μ¦, flag κ° true μΈ κ²½μ° νν λ Έλλ₯Ό κ°λ¦¬ν€κ² λ§λλ μμ μ.
- (11) ptr = inorderStart(ptr -> right): λ§μ½ flag κ° false μΈ κ²½μ° μμ λ Έλλ₯Ό κ°λ¦¬ν€λ λ Έλμ΄λ―λ‘, inorderStart() ν¨μλ₯Ό νΈμΆνλ©΄μ νμ¬ ptr μ right νλ μ£Όμκ°μ μ λ¬νκ² λ¨. κ·Έλ¬λ©΄, left λ₯Ό μν νλ©΄μ NULLμ λ§λ λ(μ λ Έλ) κΉμ§ λ μμ λ Έλλ₯Ό μννκ² λ¨.
(3) μ€λ λ νΈλ¦¬ - μ½μ μ°μ°
(4) μ€λ λ νΈλ¦¬ - μμ μ°μ°
'πλ°©μ‘ν΅μ λνκ΅ > π’μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [μλ£κ΅¬μ‘°] 9κ° - ν (0) | 2025.11.13 |
|---|---|
| [μλ£κ΅¬μ‘°] 7κ° - νΈλ¦¬ (0) | 2025.10.14 |
| [μλ£κ΅¬μ‘°] 6κ° - μ°κ²° 리μ€νΈμ μμ© (0) | 2025.10.06 |
| [μλ£κ΅¬μ‘°] 5κ° - μ°κ²° 리μ€νΈ (0) | 2025.09.04 |
| [μλ£κ΅¬μ‘°] 4κ° - ν (0) | 2025.09.02 |