[์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ์™€ ์ด์ง„ํŠธ๋ฆฌ

ํŠธ๋ฆฌ๋ž€? 

  1. ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค. 
  2. ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 
  3. ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค.
  4. ๋ฃจํŠธ ๋…ธ๋“œ๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ ์ž์‹๋“ค๋„ ๋ชจ๋‘ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.
  5. ๋…ธ๋“œ๋“ค๊ณผ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ์—ฃ์ง€๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด ์—ฐ๊ฒฐ๋œ ์—ฃ์ง€๋“ค์€ ์ ˆ๋Œ€๋กœ ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. 
  6. ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„์„ ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด ๋…ธ๋“œ์˜ ์ˆ˜ - 1 ์„ ๋งŒ์กฑํ•œ๋‹ค.
  7. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ ๋‹จ ํ•˜๋‚˜์˜ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.
  8. ๋ฃจํŠธ์—์„œ ์–ด๋–ค ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” Uniqueํ•˜๋‹ค.

 

ํŠธ๋ฆฌ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด

  1. depth : ๋ฃจํŠธ์—์„œ ์–ด๋–ค ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ์—ฃ์ง€์˜ ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.
  2. height : ๋ฃจํŠธ๋…ธ๋“œ์—์„œ ์žŽ์ƒˆ๋…ธ๋“œ์— ์ด๋ฅด๋Š” ๊ฐ€์žฅ ๊ธด ๊ฒฝ๋กœ์˜ ์—ฃ์ง€ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  3. Level : ์ด๋•Œ ํŠน์ • ๋†’์ด๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋“ค์˜ ์ง‘ํ•ฉ์„ Level์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 
  4. Leaf node : ์—ฌ๊ธฐ์„œ Leaf node๋Š” ์ž์‹๋…ธ๋“œ๊ฐ€ ์—†๋Š” ์ตœํ•˜๋‹จ์˜ ๋…ธ๋“œ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. 
  5. internal node : Leaf node๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ๋“ค์„ ๋งํ•œ๋‹ค.
  6. degree : ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ง€๋‹Œ ๊ฐ€์ง€์˜ ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.
  7. degree of tree : ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

 

์ด์ง„ํŠธ๋ฆฌ๋ž€? 

์ž์‹๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์ธ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. 
์ด์ง„ํŠธ๋ฆฌ๋Š” full binary tree, complete binary tree, perfect binary tree ๋“ฑ์ด ์žˆ๋‹ค. 

full binary tree 

๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ 0๊ฐœ ๋˜๋Š” 2๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ

complete binary tree

๋งˆ์ง€๋ง‰ Level์„ ์ œ์™ธํ•œ ๋ชจ๋“  Level์— ์œ„์น˜ํ•œ ๋…ธ๋“œ๋“ค์ด ๊ฝ‰ ์ฑ„์›Œ์ง„ ์ด์ง„ํŠธ๋ฆฌ์ด๋‹ค. 

๋ฌด์กฐ๊ฑด ๋ฐ์ดํ„ฐ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฑ„์›Œ์ ธ์•ผ ํ•œ๋‹ค.

Perfect binary tree 

full binary tree์ด๋ฉด์„œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ธ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.  ์ฆ‰, ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ๋‘๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋ชจ๋“  Leaf Node๊ฐ€ ๋™์ผํ•œ Level์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ฐ ๋†’์ด h๋งˆ๋‹ค ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ™•ํžˆ 2^(h-1) ์ด์—ฌ์•ผ ํ•œ๋‹ค. 

๊ทธ๋ž˜ํ”„ vs ํŠธ๋ฆฌ 

  1. ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜์ด๊ธฐ๋„ ํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ผ๋ฐ˜์ ์ธ ๊ทธ๋ž˜ํ”„์™€ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ผ๊นŒ? 
  2. ์šฐ์„  ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฌด๋ฐฉํ–ฅ์ธ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋‹ค. ๋‹ค์Œ์œผ๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ ํŠธ๋ฆฌ๋Š” ์‚ฌ์ดํด์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ž์ฒด ๊ฐ„์„ ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ด๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 
  3. ๊ทธ๋ž˜ํ”„๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒ, ํŠธ๋ฆฌ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ผญ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ๋งŒ ํ•œ๋‹ค. 
  4. ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์™€ ๋‹ค๋ฅด๊ฒŒ ๋ถ€๋ชจ-์ž์‹ ๊ฐœ๋…๋„ ์กด์žฌํ•œ๋‹ค. 

 

ํŠธ๋ฆฌ ์ˆœํšŒ

ํŠธ๋ฆฌ์ˆœํšŒ๋ž€ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํŠน์ • ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค. ํŠธ๋ฆฌ ์ˆœํšŒ์—๋Š” ๋ถ€๋ชจ, ์ž์‹๋…ธ๋“œ๋“ค์„ ๋ฐฉ๋ฌธํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ์ „์œ„์ˆœํšŒ, ์ค‘์œ„์ˆœํšŒ, ํ›„์œ„์ˆœํšŒ 3๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. 

preorder (์ „์œ„์ˆœํšŒ) 

๋…ธ๋“œ -> ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ -> ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹ 

    void preorder(TreeNode currentNode) {
        if(currentNode != null) {
            System.out.print(currentNode.data);
            inorder(currentNode.left);
            inorder(currentNode.right);
        }
    }

inorder (์ค‘์œ„์ˆœํšŒ)

์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ -> ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹   

    void inorder(TreeNode currentNode) {
        if(currentNode != null) {
            inorder(currentNode.left);
            System.out.print(currentNode.data);
            inorder(currentNode.right);
        }
    }

postorder (ํ›„์œ„์ˆœํšŒ) 

์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ -> ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ -> ๋…ธ๋“œ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹ 

    void postorder(TreeNode currentNode) {
        if(currentNode != null) {
            inorder(currentNode.left);
            inorder(currentNode.right);
            System.out.print(currentNode.data);
        }
    }

 

 

https://ratsgo.github.io/data%20structure&algorithm/2017/10/21/tree/

 

ํŠธ๋ฆฌ(tree)์™€ ์ด์ง„ํŠธ๋ฆฌ(binary tree) · ratsgo's blog

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ๋„๋ฆฌ ์“ฐ์ด๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ธ ํŠธ๋ฆฌ(tree)์™€ ํŠธ๋ฆฌ์˜ ์ผ์ข…์ธ ์ด์ง„ํŠธ๋ฆฌ(binary tree)์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํž™ ์ •๋ ฌ์ด ๋ญ”์ง€ ์•Œ์•„๋ณด๋ ค๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐœ๋…์„ ๋จผ์ €

ratsgo.github.io

https://gmlwjd9405.github.io/2018/08/12/data-structure-tree.html

 

[์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ(Tree)๋ž€ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io