# Tree


Node์™€ Edge๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
Tree์˜ ํŠน์„ฑ์„ ์ดํ•ดํ•˜์ž


ํŠธ๋ฆฌ๋Š” ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ(Node)์™€ ์ด ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฐ„์„ (Edge)์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

๊ทธ๋ฆผ ์ƒ ๋ฐ์ดํ„ฐ 1์„ ๊ฐ€์ง„ ๋…ธ๋“œ๊ฐ€ ๋ฃจํŠธ(Root) ๋…ธ๋“œ๋‹ค.

๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ 0๊ฐœ ์ด์ƒ์˜ ์ž์‹(Child) ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ ๋ณดํ†ต ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋กœ ๋ถ€๋ฅธ๋‹ค.


์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ€์กฑ ๊ด€๊ณ„๋„๋ฅผ ๊ทธ๋ฆด ๋•Œ ํŠธ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์ด ๋ดค์„ ๊ฒƒ์ด๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠธ๋ฆฌ๋„ ์ด ๋ฐฉ์‹์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.


ํŠธ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ํŠธ๋ฆฌ์—๋Š” ์‚ฌ์ดํด์ด ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค. (๋งŒ์•ฝ ์‚ฌ์ดํด์ด ๋งŒ๋“ค์–ด์ง„๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ทธ๋ž˜ํ”„๋‹ค)
  • ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฃจํŠธ์—์„œ ํ•œ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” ์œ ์ผํ•œ ๊ฒฝ๋กœ ๋ฟ์ด๋‹ค.
  • ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ๋ฉด, ๊ฐ„์„ ์€ N-1๊ฐœ๋ฅผ ๊ฐ€์ง„๋‹ค.

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€, ๊ทธ๋ž˜ํ”„์™€ ํŠธ๋ฆฌ์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์ธ๋ฐ, ์ด๋Š” ์‚ฌ์ดํด์˜ ์œ ๋ฌด๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.


# ํŠธ๋ฆฌ ์ˆœํšŒ ๋ฐฉ์‹

ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์€ ์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์„ ์˜ˆ์‹œ๋กœ ์ง„ํ–‰ํ•ด๋ณด์ž



  1. # ์ „์œ„ ์ˆœํšŒ(pre-order)

    ๊ฐ ๋ฃจํŠธ(Root)๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    (Root โ†’ ์™ผ์ชฝ ์ž์‹ โ†’ ์˜ค๋ฅธ์ชฝ ์ž์‹)

    1 โ†’ 2 โ†’ 4 โ†’ 8 โ†’ 9 โ†’ 5 โ†’ 10 โ†’ 11 โ†’ 3 โ†’ 6 โ†’ 13 โ†’ 7 โ†’ 14


  2. # ์ค‘์œ„ ์ˆœํšŒ(in-order)

    ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธ ํ›„ ๋ฃจํŠธ(Root)๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    (์™ผ์ชฝ ์ž์‹ โ†’ Root โ†’ ์˜ค๋ฅธ์ชฝ ์ž์‹)

    8 โ†’ 4 โ†’ 9 โ†’ 2 โ†’ 10 โ†’ 5 โ†’ 11 โ†’ 1 โ†’ 6 โ†’ 13 โ†’ 3 โ†’14 โ†’ 7


  3. # ํ›„์œ„ ์ˆœํšŒ(post-order)

    ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ๋ถ€ํ„ฐ ํ•˜์œ„๋ฅผ ๋ชจ๋‘ ๋ฐฉ๋ฌธ ํ›„ ๋ฃจํŠธ(Root)๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    (์™ผ์ชฝ ์ž์‹ โ†’ ์˜ค๋ฅธ์ชฝ ์ž์‹ โ†’ Root)

    8 โ†’ 9 โ†’ 4 โ†’ 10 โ†’ 11 โ†’ 5 โ†’ 2 โ†’ 13 โ†’ 6 โ†’ 14 โ†’ 7 โ†’ 3 โ†’ 1


  4. # ๋ ˆ๋ฒจ ์ˆœํšŒ(level-order)

    ๋ฃจํŠธ(Root)๋ถ€ํ„ฐ ๊ณ„์ธต ๋ณ„๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    1 โ†’ 2 โ†’ 3 โ†’ 4 โ†’ 5 โ†’ 6 โ†’ 7 โ†’ 8 โ†’ 9 โ†’ 10 โ†’ 11 โ†’ 13 โ†’ 14



# Code

public class Tree<T> {
    private Node<T> root;

    public Tree(T rootData) {
        root = new Node<T>();
        root.data = rootData;
        root.children = new ArrayList<Node<T>>();
    }

    public static class Node<T> {
        private T data;
        private Node<T> parent;
        private List<Node<T>> children;
    }
}


# [์ฐธ๊ณ  ์ž๋ฃŒ]

์ตœ์ข… ์ˆ˜์ • : 12/17/2022, 7:23:59 AM