์ƒˆ์†Œ์‹

์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ ์ˆœํšŒ (+์ฝ”๋“œ ๊ตฌํ˜„ with Python)

  • -

๐Ÿ’กํŠธ๋ฆฌ ์ˆœํšŒ(Tree traversal)

ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ์ˆœ์„œ๋กœ ๋ณผ ๊ฒƒ์ด๋ƒ์— ๋”ฐ๋ผ์„œ ์ „์œ„์ˆœํšŒ, ์ค‘์œ„์ˆœํšŒ, ํ›„์œ„์ˆœํšŒ๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.

 

โ˜์ „์œ„ ์ˆœํšŒ 

๋ฃจํŠธ ๋…ธ๋“œ -> ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ 
1. ๋ฃจํŠธ ๋…ธ๋“œ A์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘, A๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ์ด๋ฏ€๋กœ A ๋จผ์ €, A ๊ธฐ์ค€์œผ๋กœ ๋ดค์„ ๋•Œ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ๋Š” B์ด๋ฏ€๋กœ B ๋ฐฉ๋ฌธ.
2. B๋กœ ์™€์„œ B๊ฐ€ ๋‹ค์‹œ ๋ฃจํŠธ ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด B์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ๋Š” C์ด๋ฏ€๋กœ C๋ฅผ ๋ฐฉ๋ฌธ.
3. C์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ, ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—  ๋‹ค์‹œ B์˜ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ์ธ D๋ฅผ ๋ฐฉ๋ฌธ.
4. D๊ฐ€ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š ๋…ธ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— B๋กœ ๋‹ค์‹œ์˜ค๋ฉด B์—์„œ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋Š” ์ด๋ฏธ ๋ฐฉ๋ฌธ์™„๋ฃŒ. ๋”ฐ๋ผ์„œ A์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ E ๋ฐฉ๋ฌธ.
5. E์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ F๋ฐฉ๋ฌธ ํ›„ , ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ G๋ฐฉ๋ฌธ.

์ฝ”๋“œ ์˜ˆ์‹œ 

def preorder(self):
        def _preorder(node):
            print(node.item, end=' ')
            if node.left:
                _preorder(node.left)
            if node.right:
                _preorder(node.right)
        _preorder(self.root)

 

 

โœŒ ์ค‘์œ„ ์ˆœํšŒ

์™ผ์ชฝ ์ž์‹๋…ธ๋“œ -> ๋ฃจํŠธ ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ 
1. A์—์„œ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ์ธ B ๋ฐฉ๋ฌธํ–ˆ๋Š”๋ฐ B๋„ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ์ธ C๋ถ€ํ„ฐ ์ฒ˜์Œ์— ๋ฐฉ๋ฌธ.
2. C๋Š” ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฃจํŠธ ๋…ธ๋“œ์ธ D๋ฐฉ๋ฌธ, ๋‹ค์Œ์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ์ธ D๋ฐฉ๋ฌธ.
3. D๋ฅผ ๋ฐฉ๋ฌธํ•œ ํ›„ ๋”์ด์ƒ ๋ฐฉ๋ฌธํ•  ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ, A๋ฃจํŠธ๋กœ ๋Œ์•„์™€์„œ ๋ฐฉ๋ฌธ.
4. A์—์„œ ์™ผ์ชฝ ์ž๋…ธ๋“œ๋ฅผ ์ด๋ฏธ ๋‹ค ๋ฐฉ๋ฌธํ–ˆ์œผ๋‹ˆ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ์ธ E๋กœ ๊ฐ€์„œ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ์ธ F ๋ฐฉ๋ฌธ.
5. F ๋ฐฉ๋ฌธ ํ›„, ๋ฃจํŠธ ๋…ธ๋“œ์ธ E๋กœ ๋Œ์•„๊ฐ€์„œ ๋ฐฉ๋ฌธ ํ›„ , ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ์ธ G ๋ฐฉ๋ฌธ.  

์ฝ”๋“œ ์˜ˆ์‹œ 

def inorder(self):
    def _inorder(node):
        if node.left:
            _inorder(node.left)
        print(node.item, end=' ')
        if node.right:
            _inorder(node.right)
    _inorder(self.root)

 

โœŒโ˜ ํ›„์œ„ ์ˆœํšŒ 

์™ผ์ชฝ ์ž์‹๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ -> ๋ฃจํŠธ ๋…ธ๋“œ 
1. A์—์„œ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ ๋๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€์„œ C๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ.
2. ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ C ๋ฐฉ๋ฌธ ํ›„ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ D ๋ฐฉ๋ฌธ. 
3. ๋ฃจ๋“œ ๋…ธ๋“œ์ธ B ๋ฐฉ๋ฌธ.
4. A์˜ ๊ธฐ์ค€์—์„œ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ ๋‹ค ๋ฐฉ๋ฌธ ํ•˜์˜€์œผ๋‹ˆ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ ๋ฐฉ๋ฌธํ•˜๋Ÿฌ ๊ฐ. E์˜ ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ F๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ.
5. ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ F ๋ฐฉ๋ฌธ ํ›„ ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ G๋ฐฉ๋ฌธ.
6. ๋ฃจํŠธ ๋…ธ๋“œ E ๋ฐฉ๋ฌธ ํ›„ A ๋ฃจํŠธ ๋…ธ๋“œ ๋ฐฉ๋ฌธ.  

์ฝ”๋“œ ์˜ˆ์‹œ

def postorder(self):
    def _postorder(node):
        if node.left:
            _postorder(node.left)
        if node.right:
            _postorder(node.right)
        print(node.item, end=' ')
    _postorder(self.root)

 

 

์ „์ฒด ์ฝ”๋“œ ์˜ˆ์‹œ 

from collections import deque

class Node(object):
    def __init__(self, item):
        self.item = item
        self.left = self.right = None
        
class BinaryTree(object):
    def __init__(self):
        self.root = None
    #์ „์œ„ ์ˆœํšŒ
    def preorder(self):
        def _preorder(node):
            print(node.item, end=' ')
            if node.left:
                _preorder(node.left)
            if node.right:
                _preorder(node.right)
        _preorder(self.root)
    #์ค‘์œ„ ์ˆœํšŒ
    def inorder(self):
        def _inorder(node):
            if node.left:
                _inorder(node.left)
            print(node.item, end=' ')
            if node.right:
                _inorder(node.right)
        _inorder(self.root)
    #ํ›„์œ„ ์ˆœํšŒ
    def postorder(self):
        def _postorder(node):
            if node.left:
                _postorder(node.left)
            if node.right:
                _postorder(node.right)
            print(node.item, end=' ')
        _postorder(self.root)
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.