BST (Binary_Search_Tree) - sihyun10/data_structures_docker GitHub Wiki

BST๋ž€? (Binary Search Tree)

๋ชจ๋“  ์›์†Œ๋Š” ์œ ์ผํ•œ key ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค (์ค‘๋ณต ์—†์Œ)

์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ์›์†Œ๋“ค์€ ๋ฃจํŠธ(root)์˜ ํ‚ค๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค
์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ์›์†Œ๋“ค์€ ๋ฃจํŠธ(root)์˜ ํ‚ค๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค
์ฆ‰ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ < ๋ฃจํŠธ < ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ˆœ์„œ์ด๋‹ค.

์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋‘˜ ๋‹ค ์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ์ด๋‹ค

        8
       / \
      3   10
     / \    \
    1   6    14
       / \   /
      4   7 13

BST์˜ ํŠน์ง•

  • ์ค‘์œ„ ์ˆœํšŒ(Inorder Traversal)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ •๋ ฌ(์˜ค๋ฆ„์ฐจ์ˆœ)๋œ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค
  • [์‹œ๊ฐ„๋ณต์žก๋„] ๊ท ํ˜• ์ƒํƒœ : O(logN), ๋ถˆ๊ท ํ˜• ์ƒํƒœ : ์ตœ๋Œ€ O(N)

BST ๊ตฌ์กฐ์ฒด

// ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๋…ธ๋“œ 1๊ฐœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ์กฐ
typedef struct _bstnode {
  int item;
  struct _bstnode *left;
  struct _bstnode *right;
} BSTNode; 
  • item : ์ด ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง€๋Š” ์ •์ˆ˜ ๋ฐ์ดํ„ฐ
  • left : ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์ฃผ์†Œ
  • right : ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์ฃผ์†Œ

Q. ์™œ left, right๋Š” ์ž๊ธฐ์ฐธ์กฐ(self-reference) ๊ตฌ์กฐ์ฒด์ผ๊นŒ?

์ด์ง„ํŠธ๋ฆฌ์—์„œ ๋…ธ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•˜๋Š”๋ฐ, ์™œ ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์จ์•ผํ•˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋‹ค.

ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ๋“ค๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

// 10์€ ๋ฃจํŠธ(root) ๋…ธ๋“œ  
// 10์˜ ์™ผ์ชฝ ์ž์‹ : 5 (root->left = ์ฃผ์†Œ_5)
// 10์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ : 15 (root->right = ์ฃผ์†Œ_15)

      10
     /  \
    5   15

๋…ธ๋“œ๋ผ๋ฆฌ ์„œ๋กœ ์ฃผ์†Œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠธ๋ฆฌ ๊ตฌ์กฐ๋Š” ์žฌ๊ท€์ ์ธ ๊ตฌ์กฐ์ด๋‹ค.

        10
       /  
      5

5๋ฅผ ํ˜ผ์ž ๋ณด๋ฉด "๋ฃจํŠธ ๋…ธ๋“œ"๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค

ํŠธ๋ฆฌ๋Š” ์ด๋ ‡๊ฒŒ ์ž‘์€ ํŠธ๋ฆฌ๋“ค์ด ๊ณ„์† ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ž์‹๋“ค๋„ ๋˜‘๊ฐ™์ด BST Node๋‹ˆ๊นŒ "๊ฐ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผํ•œ๋‹ค"
๊ทธ๋ž˜์„œ ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ์ž์‹ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค

์ฆ‰ ์ •๋ฆฌํ•˜์ž๋ฉด
left, right๋Š” ์ž์‹ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐํ•˜๋Š” ํ†ต๋กœ์ด๋ฉฐ,
๊ทธ๊ฑธ ํ†ตํ•ด ๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.