πŸ‘Š 이진 탐색 트리 κ°œλ…


이진 탐색 νŠΈλ¦¬λŠ” μž„μ˜μ˜ ν‚€λ₯Ό κ°€μ§„ μ›μ†Œλ₯Ό μ‚½μž…, μ‚­μ œ, 검색 등을 ν•˜κΈ°μ— 효과적인 μžλ£Œκ΅¬μ‘°μ΄λ‹€. λͺ¨λ“  연산은 key (node) 값을 기초둜 μ‹€ν–‰ν•˜λ©°, 2개 μ΄μƒμ˜ 같은 key값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
이진 νŠΈλ¦¬λŠ” 곡백이 아닐 μ‹œμ— λ‹€μŒκ³Ό 같은 쑰건듀을 λ§Œμ‘±ν•œλ‹€.

  • λͺ¨λ“  λ…Έλ“œλŠ” μƒμ΄ν•œ ν‚€λ₯Ό 가짐.
  • μ™Όμͺ½ μ„œλΈŒ 트리 λ…Έλ“œλ“€μ˜ ν‚€λŠ” 루트의 킀보닀 μž‘μ•„μ•Ό ν•˜κ³ , 였λ₯Έμͺ½ μ„œλΈŒ 트리 λ…Έλ“œλ“€μ˜ ν‚€λŠ” 루트의 킀보닀 컀야 ν•œλ‹€.

μ˜ˆμ‹œ:

pic1.png (a): 이진 탐색 νŠΈλ¦¬κ°€ μ•„λ‹˜ / (b): 이진 탐색 트리 / (c): 이진 탐색 트리



이진 탐색 νŠΈλ¦¬μ—μ„œμ˜ 탐색 (μˆœν™˜μ  기술)

ν‚€ 값이 x인 μ›μ†Œλ₯Ό 탐색할 λ•Œ
이진 탐색 νŠΈλ¦¬κ°€ 곡백이면, μ‹€νŒ¨λ‘œ 탐색이 λλ‚œλ‹€. μ‹œμž‘μ€ λ£¨νŠΈμ—μ„œλΆ€ν„° μ‹œμž‘μ„ ν•˜κ³ , 루트의 ν‚€ 값이 xμΌλ•Œ, 탐색이 μ„±κ³΅ν•˜μ—¬ μ’…λ£Œλœλ‹€. ν‚€κ°’ xκ°€ 루트의 킀값보닀 μž‘μ„ μ‹œ, 루트의 μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬λ§Œ νƒμƒ‰ν•œλ‹€. ν‚€κ°’ xκ°€ 루트의 킀값보닀 클 λ•Œ, 루트의 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬λ§Œ νƒμƒ‰ν•œλ‹€.


✍️ 탐색 μ•Œκ³ λ¦¬μ¦˜

searchBST(B, x){
    p = B;
    if(p == null) return null;      // xκ°€ μ—†μŒ
    if(p.key == x) return p;        // 탐색 성곡
    if(p.key < x) return searchBST(p.right, x);     // 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬ 탐색
    else return searchBST(p.right, x);          // μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬ 탐색
}



이진 탐색 νŠΈλ¦¬μ—μ„œμ˜ μ‚½μž…

ν‚€ 값이 x인 μƒˆλ‘œμš΄ μ›μ†Œλ₯Ό μ‚½μž…ν•  λ•Œ
xλ₯Ό ν‚€ κ°’μœΌλ‘œ κ°€μ§„ μ›μ†Œκ°€ μžˆλŠ”μ§€λ₯Ό νƒμƒ‰ν•œλ‹€. 탐색이 μ‹€νŒ¨ν•˜λ©΄, 탐색이 μ’…λ£Œ 된 지점에 μ›μ†Œλ₯Ό μ‚½μž…ν•œλ‹€.

✍️ μ‚½μž… μ•Œκ³ λ¦¬μ¦˜

insertBST(b, x){
    p = B;
    do{
        if(x = p.key) return;
        q <- p;
        if(x < p.key) p = p -> left;
        else p = p -> right;
    }while(p != null)

    anode = getNode();
    anode -> key = x;
    anode -> right = null;
    anode -> left = null;
    if(B == null) B = newNode;
    else if(x < q.key) q -> left = newNode;
    else q-> right = newNode;
    return;
}



이진 탐색 νŠΈλ¦¬μ—μ„œμ˜ μ‚­μ œ

μ‚­μ œν•˜λ €λŠ” μ›μ†Œμ˜ ν‚€ 값이 μ£Όμ–΄μ‘Œμ„ λ•Œ
xλ₯Ό ν‚€ κ°’μœΌλ‘œ κ°€μ§„ μ›μ†Œκ°€ μžˆλŠ”μ§€λ₯Ό νƒμƒ‰ν•œλ‹€. 탐색이 μ‹€νŒ¨ν•˜λ©΄, 탐색이 μ’…λ£Œ 된 지점에 μ›μ†Œλ₯Ό μ‚½μž…ν•œλ‹€.



4. πŸ’» μ‹€ν–‰ν™”λ©΄

example.png

μœ„ μ½”λ“œλ₯Ό μ°Έμ‘°ν•˜μ‹œλ©΄μ„œ κΆκΈˆν•˜μ‹  점이 μžˆλ‹€λ©΄ μ•„λž˜ λŒ“κΈ€λ‘œ λ‚¨κ²¨μ£Όμ„Έμš”!πŸ‘‡