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

[JavaScript/section 8] 03 - μ΄μ§„νŠΈλ¦¬ 순회

_μ„±ν˜Έ_ 2022. 10. 18. 17:11
728x90
λ°˜μ‘ν˜•

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

μ΄μ§„νŠΈλ¦¬ 순회λ₯Ό μ—°μŠ΅ν•΄λ³΄λŠ” λ¬Έμ œμ΄λ‹€. 처음 λ‚˜μ˜¨ κ°œλ…μ΄κΈ°μ— λ¨Όμ € κ°œλ… 정리λ₯Ό ν•  ν•„μš”κ°€ μžˆλ‹€.

μ΄μ§„νŠΈλ¦¬μ— λŒ€ν•΄μ„œ λ¨Όμ € μ•Œμ•„λ³΄μžβ—
λ‚˜λ¬΄λ₯Ό 뒀집어 놓은 λͺ¨μ–‘κ³Ό κ°™μœΌλ©° 각각의 λ…Έλ“œκ°€ μ΅œλŒ€ 두 개의 μžμ‹ λ…Έλ“œλ₯Ό κ°€μ§€λŠ” 트리 자료 ꡬ쑰둜, μžμ‹ λ…Έλ“œλ₯Ό 각각 μ™Όμͺ½ μžμ‹ λ…Έλ“œμ™€ 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œλΌκ³  ν•œλ‹€. λ‹€μŒ κ·Έλ¦Όκ³Ό κ°™λ‹€.


μ΄μ§„νŠΈλ¦¬λ₯Ό μˆœνšŒν•˜λŠ” λ°©λ²•μ—λŠ” μ „μœ„μˆœνšŒ(preorder), μ€‘μœ„μˆœνšŒ(inorder), ν›„μœ„μˆœνšŒ(postorder)의 3가지가 μžˆλŠ”λ°, μ΄λŠ” λΆ€λͺ¨ λ…Έλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜κ³  μžˆλ‹€.

μ „μœ„μˆœνšŒ(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)ν•  수 μžˆμœΌλ‚˜ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 곡간이 μ‘΄μž¬ν•  경우 κΈ°μ–΅ κ³΅κ°„μ˜ λ‚­λΉ„κ°€ μ‹¬ν•˜λ‹€λŠ” 단점이 있기 λ•Œλ¬Έμ΄λ‹€.

πŸ“ 풀이 방법

λ‹€μŒ μ½”λ“œλ₯Ό 보면 answer += v + ' ' μ‹μ˜ μœ„μΉ˜μ— 따라 μˆœνšŒν•˜λŠ” 방법이 λ‹¬λΌμ§€λŠ” 것을 확인할 수 μžˆλ‹€. κ·ΈλŒ€λ‘œ μ™Έμš°λŠ” 것도 방법일 수 μžˆκ² μ§€λ§Œ μŠ€νƒ ν”„λ ˆμž„μ„ 직접 μ¨λ³΄λ©΄μ„œ 과정을 μ‚΄νŽ΄λ³΄λ©΄ μ΄ν•΄ν•˜λŠ”λ° λ§Žμ€ 도움이 λœλ‹€.

  • μ™Όμͺ½ μžμ‹ λ…Έλ“œλŠ” λΆ€λͺ¨ λ…Έλ“œμ˜ * 2에 ν•΄λ‹Ήν•˜κ³ , 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œλŠ” λΆ€λͺ¨ λ…Έλ“œμ˜ * 2 + 1에 ν•΄λ‹Ήν•œλ‹€.
function solution(n) {
  let answer = '';
  function DFS(v) {
    if (v > 7) return;
    else {
      // μ „μœ„μˆœνšŒ
      answer += v + ' ';
      DFS(v * 2);
      // μ€‘μœ„μˆœνšŒ
      // answer += v + ' ';
      DFS(v * 2 + 1);
      // ν›„μœ„μˆœνšŒ
      // answer += v + ' ';
    }
  }
  DFS(n);
  return answer;
}

console.log(solution(1));

πŸ’» μ°Έκ³ ν•œ μ‚¬μ΄νŠΈ

https://ywtechit.tistory.com/m/309

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

πŸ“ section08 - 3 - μ΄μ§„νŠΈλ¦¬ 순회(κΉŠμ΄μš°μ„ νƒμƒ‰) μ΄μ§„νŠΈλ¦¬ μˆœνšŒκ°€ 무엇인지 λͺ¨λ₯΄λŠ” μ‚¬λžŒμ€ μ–΄λ €μšΈ 수 μžˆλŠ” λ¬Έμ œλ‹€. μ—¬κΈ°μ„œ μ΄μ§„νŠΈλ¦¬λž€ λ‚˜λ¬΄λ₯Ό 뒀집어 놓은 λͺ¨μ–‘μœΌλ‘œ ν•œ 개의 λΆ€λͺ¨ λ…Έλ“œμ™€ 2개의 자

ywtechit.tistory.com