ํŠธ๋ฆฌ 2 (์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ)

8/25/2025

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ Binary Search Tree

์ €๋ฒˆ ์‹œ๊ฐ„์—๋Š” ํƒ์ƒ‰์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ดค๋Š”๋ฐ, ํŠน์ • ์ž๋ฃŒ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์ฐพ์•„๋ณด๊ธฐ ์œ„ํ•ด ๋งค ๋ฒˆ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š”๊ฑด ๋งค์šฐ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋งŒ๋“  ์ด์ง„ํŠธ๋ฆฌ์˜ ๋ณ€ํ˜•์ด ๋ฐ”๋กœ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋‹ค.
ํ•ต์‹ฌ์€ ๊ฐ ๋…ธ๋“œ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ฐ€๋ น ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ์ž‘์œผ๋ฉด ์™ผ์ชฝ, ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋กœ ๊ฐ€๊ฒŒ ํ•œ๋‹ค๋˜๊ฐ€ ํ•˜๋Š” ๋“ฑ์˜ ์ œํ•œ์„ ๋‘๋Š”๊ฒƒ.

๊ฒ€์ƒ‰ ์—ฐ์‚ฐ

(์ž์—ฐ์ˆ˜ ๋น„๊ต์˜ ๊ฒฝ์šฐ)

  1. ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ฐพ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ ๋…ธ๋“œ๋กœ, ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋กœ ์ด๋™.
  2. ์ฐพ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์œผ๋ฉด ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฆฌํ„ด
  3. ์ฐพ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ”„๋…ธ๋“œ์— ๋„์ฐฉํ•  ๋•Œ ๊นŒ์ง€ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด Null์„ ๋ฐ˜ํ™˜(๋ฆฌํ”„๋…ธ๋“œ์˜ ๋ชจ๋“  ํฌ์ธํ„ฐ๋Š” ๋‹ค null์ด๊ธฐ ๋•Œ๋ฌธ์—)
    

์žฌ๊ท€ vs while ๋ฐ˜๋ณต

์žฌ๊ท€์— ๋Œ€ํ•œ ์ˆ˜์—…๋•Œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ์ด์ง€๋งŒ, ์žฌ๊ท€ํ˜ธ์ถœ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋” ๋งŽ์ด ํ•„์š”๋กœ ํ•œ๋‹ค. (O(1)O(1) ๊ณผ O(n)O(n))
๊ทธ๋ž˜์„œ ์œ„์˜ ๊ฒ€์ƒ‰ ์˜ˆ์‹œ์—์„œ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด while ๋ฐ˜๋ณต์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ™์€ ์ผ์„ ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

Node* search(Node* root, int target) {
    Node* current = root;

    while (current != NULL) {
        if (target < current->data) {
            current = current->left;
        }
        else if (target > current->data) {
            current = current->right;
        }
        else {
            return current;
        }
    }

    return NULL;
}

์ „์ž„ ํ›„์ž„ ๋…ธ๋“œ

์ค‘์œ„ ์ „์ž„ ๋…ธ๋“œ, ํ›„์ž„ ๋…ธ๋“œ :
๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ, ํ•ด๋‹น ๋…ธ๋“œ์˜ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•œ ๋…ธ๋“œ๋“ค์„ ๋งํ•œ๋‹ค.
ํŠธ๋ฆฌ ๊ตฌ์กฐ์•ˆ์—์„œ ์ž๊ธฐ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์ด ์•„๋‹ˆ๋ผ.

์‚ฝ์ž…

๊ฒ€์ƒ‰ ์—ฐ์‚ฐ๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค.
ํŠธ๋ฆฌ์— 5๋ฅผ ๋„ฃ๊ณ ์‹ถ๋‹ค๋ฉด 5๋ฅผ ๋„ฃ์„ ์œ„์น˜๋กœ ์ฐพ์•„๊ฐ€์„œ 5๊ฐ€ ์—†๋‹ค๋ฉด ๊ทธ ์ž๋ฆฌ์— ์‚ฝ์ž…ํ•˜๋ฉด ๋.
๊ทธ๋Ÿฐ๋ฐ ์ฃผ์˜ํ•  ์ ์€, ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ๋ถ€๋ชจ ๋…ธ๋“œ์—๊ฒŒ ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ฃผ์†Œ๊ฐ’์„ ์ „๋‹ฌํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.