본문 바로가기

알고리즘/백준

[백준] 5639번 : 이진 검색 트리

728x90

https://www.acmicpc.net/problem/5639

 

5639번: 이진 검색 트리

트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다

www.acmicpc.net

Node의 자료구조를 만들어 문제를 해결 하였습니다. InsertNode함수는 현재 루트 노드로부터 해당 노드를 인서트 합니다.

재귀 함수를 사용하여 preOrder 함수는 전위순회로 출력하고 postOrder 함수는 후위순회로 출력합니다.

import sys
sys.setrecursionlimit(10**6)

class Node(object):
    def __init__(self,data=None):
        self.data = data
        self.leftnode = None
        self.rightnode = None
    
        
    def insertNode(self, value):
        currentNode = self
        while True:
            if currentNode.data > value:
                if not currentNode.leftnode:
                    currentNode.leftnode = Node(value)
                    break
                else:
                    currentNode = currentNode.leftnode
            else:
                if not currentNode.rightnode:
                    currentNode.rightnode = Node(value)
                    break
                else:
                    currentNode = currentNode.rightnode
            

currentNode = Node(int(input()))

while True:
    try:
        currentNode.insertNode(int(input()))
    except:
        break
    

def postOrder(node):
    if node is None:
        return
    
    postOrder(node.leftnode)
    postOrder(node.rightnode)
    print(node.data)

def preOrder(node):
    if node is None:
        return
    
    print(node.data)
    preOrder(node.leftnode)
    preOrder(node.rightnode)
    
postOrder(currentNode)
728x90