Algorithm/μΈν”„λŸ°(inflearn)

[ μžλ°”μŠ€ν¬λ¦½νŠΈ(JavaScript) ] section08 - 3 - μ΄μ§„νŠΈλ¦¬ 순회(κΉŠμ΄μš°μ„ νƒμƒ‰)

YWTechIT 2021. 9. 16. 12:16
728x90

πŸ“ section08 - 3 - μ΄μ§„νŠΈλ¦¬ 순회(κΉŠμ΄μš°μ„ νƒμƒ‰)

μ΄μ§„νŠΈλ¦¬ μˆœνšŒκ°€ 무엇인지 λͺ¨λ₯΄λŠ” μ‚¬λžŒμ€ μ–΄λ €μšΈ 수 μžˆλŠ” λ¬Έμ œλ‹€. μ—¬κΈ°μ„œ μ΄μ§„νŠΈλ¦¬λž€ λ‚˜λ¬΄λ₯Ό 뒀집어 놓은 λͺ¨μ–‘μœΌλ‘œ ν•œ 개의 λΆ€λͺ¨ λ…Έλ“œμ™€ 2개의 μžμ‹ λ…Έλ“œλ₯Ό κ°–κ³  μžˆλŠ” 트리ꡬ쑰λ₯Ό μΌμ»«λŠ”λ‹€.

 

 

μ΄μ§„νŠΈλ¦¬λ₯Ό μˆœνšŒν•  λ•ŒλŠ” 3가지 방법이 μžˆλ‹€. μ „μœ„μˆœνšŒ(preOrder), μ€‘μœ„μˆœνšŒ(inOrder), ν›„μœ„μˆœνšŒ(postOrder)κ°€ μžˆλŠ”λ° μ–΄λ–»κ²Œ μˆœνšŒν•˜λŠ”μ§€ κ°„λž΅ν•˜κ²Œ μ•Œμ•„λ³΄μž.

 

첫 번째둜 μ „μœ„μˆœνšŒ(preOrder)λŠ” λΆ€λͺ¨ → μ™Όμͺ½ μžμ‹ → 였λ₯Έμͺ½ μžμ‹ 순으둜 νƒμƒ‰ν•œλ‹€. μœ„ μ‚¬μ§„μ˜ 순회 κ²°κ³ΌλŠ” 1-2-4-5-3-6-7κ°€ λœλ‹€.

 

두 번째둜 μ€‘μœ„μˆœνšŒ(inOrder)λŠ” μ™Όμͺ½ μžμ‹ → λΆ€λͺ¨ → 였λ₯Έμͺ½ μžμ‹ 순으둜 νƒμƒ‰ν•œλ‹€. μ΄λ•Œ μ£Όμ˜ν•  점은 더 이상 μžμ‹μ΄ 없을 λ•ŒκΉŒμ§€ λ‚΄λ €κ°„ λ‹€μŒ μ™Όμͺ½ μžμ‹μ„ νƒμƒ‰ν•˜λŠ” 것이닀. μœ„ μ‚¬μ§„μ˜ 순회 κ²°κ³ΌλŠ” 4-2-5-1-6-3-7κ°€ λœλ‹€.

 

λ§ˆμ§€λ§‰μœΌλ‘œ ν›„μœ„μˆœνšŒ(postOrder)λŠ” μ™Όμͺ½ μžμ‹ → 였λ₯Έμͺ½ μžμ‹ → λΆ€λͺ¨ 순으둜 νƒμƒ‰ν•˜λŠ”λ° μ€‘μœ„ μˆœνšŒμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 더 이상 μžμ‹μ΄ 없을 λ•ŒκΉŒμ§€ λ‚΄λ €κ°„ λ‹€μŒ 였λ₯Έμͺ½ μžμ‹μ„ νƒμƒ‰ν•œλ‹€. μœ„ μ‚¬μ§„μ˜ 순회 κ²°κ³ΌλŠ” 4-5-2-6-7-3-1κ°€ λœλ‹€.

 

사싀 μ΄λ ‡κ²Œ 이둠으둜 μ–΄λ–»κ²Œ μˆœνšŒν•˜λŠ”μ§€ λ°°μ›Œλ„ 막상 μ½”λ“œλ‘œ κ΅¬ν˜„ν•˜λ €λ‹ˆκΉŒ 손이 잘 움직이지 μ•Šμ•˜λ‹€. μ΄μ§„νŠΈλ¦¬λ₯Ό λ°°μ—΄λ‘œ κ΅¬ν˜„ν•˜μ§€ μ•Šκ³  DFS둜 κ΅¬ν˜„ν•˜λŠ” μ΄μœ λŠ” κ°„λ‹¨ν–ˆλŠ”λ°, λ…Έλ“œμ˜ μœ„μΉ˜λ₯Ό μ‰½κ²Œ μ ‘κ·Ό(indexing)ν•  수 μžˆμœΌλ‚˜ κΈ°μ–΅ κ³΅κ°„μ˜ λ‚­λΉ„κ°€ μ‹¬ν•˜λ‹€λŠ” 단점이 μžˆλ‹€κ³  λ§μ”€ν•˜μ…¨λ‹€. λ§Œμ•½, 4개의 dataλ₯Ό λ°°μ—΄λ‘œ μ΄μ§„νŠΈλ¦¬μ²˜λŸΌ ν‘œν˜„ν•˜λ©΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 11개의 곡간이 λ‚­λΉ„λœλ‹€κ³  ν•˜μ…¨λ‹€.

 

 

이 문제λ₯Ό ν’€ λ•Œ μ™Όμͺ½ μžμ‹μ€ ν˜„μž¬ L(level)의 2배이고, 였λ₯Έμͺ½ μžμ‹μ€ ν˜„μž¬ L(level)의 2λ°°+1μ΄λΌλŠ” μ„±μ§ˆμ„ μ΄μš©ν•΄μ„œ 풀어보라고 ν•˜μ…¨λ‹€. 결둠적으둜 μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μ•˜λŠ”λ°, μ‹ κΈ°ν•œ 점은 console.log μ½”λ“œμ˜ μœ„μΉ˜λ§Œ μœ„μ•„λž˜λ‘œ λ‹¬λΌμ‘Œμ„ 뿐인데 κ²°κ³Όκ°€ λ‹€λ₯΄κ²Œ λ‚˜μ˜¨ 것이닀.

 

 

728x90

 

// μ „μœ„μˆœνšŒ(preOrder)
function solution1(v){
  function preOrder(v){
    if(v>7) return;
    else{
      console.log(v);
      preOrder(v*2);
      preOrder(v*2+1);
    }
  }
  preOrder(v);
}

solution1(1)
πŸ‘‰πŸ½ 1 2 4 5 3 6 7

// μ€‘μœ„μˆœνšŒ(inOrder)
function solution2(v){
  function inOrder(v){
    if(v>7) return;
    else{
      inOrder(v*2);
      console.log(v);
      inOrder(v*2+1);
    }
  }
  inOrder(v);
}

solution2(1)
πŸ‘‰πŸ½ 4 2 5 1 6 3 7

// ν›„μœ„μˆœνšŒ(postOrder)
function solution3(v){
  function postOrder(v){
    if(v>7) return;
    else{
      postOrder(v*2);
      console.log(v);
      postOrder(v*2+1);
    }
  }
  postOrder(v);
}

solution3(1)
πŸ‘‰πŸ½ 4 5 2 6 7 3 1
λ°˜μ‘ν˜•