• 02. ์ž๋ฃŒ๊ตฌ์กฐ trees: tree traversal, binary trees, binary expression trees

    2020. 2. 25.

    by. ํ•ด๋Š”์„ 

    02. trees: tree traversal, binary trees, binary expression trees

    ํŠธ๋ฆฌ, ํŠธ๋ฆฌํƒ์ƒ‰, ์ด์ง„ ํŠธ๋ฆฌ, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ, ํŠธ๋ฆฌ ์ˆœํšŒ, ์ „์œ„ ์ˆœํšŒ, ์ค‘์œ„ ์ˆœํšŒ, ํ›„์œ„ ์ˆœํšŒ


    0. tree

    ํŠธ๋ฆฌ๋ž€ ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜๋‹ค.

    ์–ด๋–ค ๋…ธ๋“œ๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋…ธ๋“œ๋“ค์€ ๊ฐ ์„œ๋กœ ๋‹ค๋ฅธ ์ž์‹์„ ๊ฐ€์ง€๋ฉฐ ์ด ๋•Œ ๊ฐ ๋…ธ๋“œ๋Š” ์žฌ์‚ฌ์šฉ ๋˜์ง€ ์•Š๋Š”๋‹ค.

    ์„œ๋กœ ๋‹ค๋ฅธ ์ž„์˜์˜ ๋‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ๋กœ๋Š” ํ•˜๋‚˜์ด๋ฉฐ, ์‚ฌ์ดํด, ์ฆ‰ ๋น™๋น™ ๋Œ๊ฒŒ ์„ค๊ณ„๋œ ๋…ธ๋“œ ์ง‘ํ•ฉ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ , ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ root(๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ, ๋งจ ๊ผญ๋Œ€๊ธฐ)๊ฐ€ ์กด์žฌํ•œ๋‹ค.

     

    ๋‹ค์Œ์€ tree์— ๋Œ€ํ•œ ์šฉ์–ด ์ •๋ฆฌ๋‹ค.

     

    • ๋…ธ๋“œ(node) : ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”, ๊ทธ๋ž˜ํ”„์˜ ์ •์ ์œผ๋กœ, value๊ฐ’๊ณผ ๋ถ€๋ชจ ์ž์‹์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • ์—ฃ์ง€(edge, ๊ฐ€์ง€) : ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์œผ๋กœ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
    • ๋ฃจํŠธ(root node) : ๊ฐ€์žฅ ์ƒ์œ„ ๋…ธ๋“œ๋กœ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค.
    • ๋ฆฌํ”„(leaf node, ๋‹จ๋ง ๋…ธ๋“œ) : ๊ฐ€์žฅ ํ•˜์œ„ ๋…ธ๋“œ๋กœ ์ž์‹์„ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค.
    • ๋ถ€๋ชจ ๋…ธ๋“œ : ์–ด๋–ค ๋…ธ๋“œ์—์„œ ์ž์‹ ๊ณผ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค ์ค‘ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ํ–ฅํ•˜๋Š” ๋…ธ๋“œ.
    • ์ž์‹ ๋…ธ๋“œ : ์–ด๋–ค ๋…ธ๋“œ์—์„œ ์ž์‹ ๊ณผ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค ์ค‘ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ํ–ฅํ•˜๋Š” ๋…ธ๋“œ.
    • ํ˜•์ œ  ๋…ธ๋“œ : ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€๋Š” ์ž์‹ ๋…ธ๋“œ๋“ค์„ ๋งํ•œ๋‹ค.
    • ๊นŠ์ด(depth) : ๋ถ€๋ชจ์—์„œ ์ž์‹์œผ๋กœ ์ด๋™ํ•  ๋•Œ, ๊นŠ์ด๊ฐ€ 1 ์ฆ๊ฐ€ํ•œ๋‹ค. root node์˜ ๊นŠ์ด๋Š” 0์ด๋‹ค.
    • ๊ธธ์ด(length) : ์ž„์˜์˜ ๋‘ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘, ๋„์ฐฉ์œผ๋กœ ํ•˜๋Š” ๊ฒฝ๋กœ์—์„œ ๊ฑฐ์น˜๊ฒŒ ๋˜๋Š” ๋…ธ๋“œ์˜ ์ˆ˜
    • ์ฐจ์ˆ˜(degree) : ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜

    ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด์ง„ ํŠธ๋ฆฌ์™€ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ํŠธ๋ฆฌ๋‹ค.(binary tree and non-binary tree)

     

    1. tree traversal

    ํŠธ๋ฆฌ ์ˆœํšŒ. ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ, ์ฒด๊ณ„์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค. ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ์ „์œ„ ์ˆœํšŒ, ์ค‘์œ„ ์ˆœํšŒ, ํ›„์œ„ ์ˆœํšŒ, ๋ ˆ๋ฒจ ์ˆœ์„œ ์ˆœํšŒ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

     

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

     

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

    preorder

    ์ „์œ„ ์ˆœํšŒ๋Š” ๊นŠ์ด ์šฐ์„  ์ˆœํšŒ๋ผ๊ณ ๋„ ํ•œ๋‹ค.(depth-first traversal) ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์™€ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    2) ์ค‘์œ„ ์ˆœํšŒ (Inorder)

     

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

    inorder

    ์ค‘์œ„ ์ˆœํšŒ๋Š” ๋Œ€์นญ ์ˆœํšŒ๋ผ๊ณ ๋„ ํ•œ๋‹ค.(symmetric) ์ด์ง„ ํŠธ๋ฆฌ์—์„œ๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

     

     

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

     

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

    postorder

     

    4) ๋ ˆ๋ฒจ ์ˆœ์„œ ์ˆœํšŒ

    ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‚ฎ์€ ๋ ˆ๋ฒจ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ˆœํšŒํ•œ๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ์ˆœํšŒ๋ผ๊ณ ๋„ ํ•œ๋‹ค.(breadth-first traversal) ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)๊ณผ๋„ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    2. binary trees

    ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ 2๊ฐœ ์ดํ•˜์˜ ์ž์‹์„ ๊ฐ€์ง€๊ณ , ์ด์ง„ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ํŠธ๋ฆฌ๋Š” ์ž์‹ ๊ฐœ์ˆ˜์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†๋‹ค.

    non-binary tree์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ์šฉ์ฒ˜์ธ trie ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํ›„์— ๋‹ค๋ฃจ๊ฒ ๋‹ค.(ch 7์—์„œ)

     

    binary tree์ค‘ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ binary-search-tree(BST)๋‹ค.

    BST ๋ž€ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ ์ž์‹์œผ๋กœ ๊ฐ€์ง€๋ฉฐ ์ด๋•Œ ๋ฌด์กฐ๊ฑด ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ <= ์ž์‹  <= ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ํ˜•ํƒœ๋‹ค. ์ฆ‰, ์ •๋ ฌ(?)์ด ๋˜์–ด์žˆ๋Š” ์ƒํƒœ๋‹ค.

    ๊ทธ๋ž˜์„œ ์ž๋ฃŒ ์ž…๋ ฅ, ์‚ญ์ œ, ํƒ์ƒ‰ ๋ชจ๋‘ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(log N)์ด๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ch3์—์„œ ๋‹ค๋ฃจ๊ฒ ๋‹ค.

    (binary tree ์ฝ”๋“œ ๋„ฃ๊ธฐ)

     

     

     

    3. binary expression trees

     

     

    https://en.wikipedia.org/wiki/Binary_expression_tree

     

     


    reference

    http://bitly.kr/MOWBBy

    http://www.secmem.org/blog/2019/05/09/%ED%8A%B8%EB%A6%AC%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%EC%9D%B4%ED%95%B4/

    https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%A6%AC_%EC%88%9C%ED%9A%8C

     

     

    ๋ถ€์ œ๋ชฉ์€ ์ œ๋ชฉ 3์œผ๋กœ

    ๊ธ€๊ผด์€ ๋ณธ๊ณ ๋”• L

    ๋Œ“๊ธ€