#!/usr/bin/env python3
# -*- coding: UTF-8 -*-


class Node(object):

    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right


class BinarySearchTree(object):

    def __init__(self):
        self.root = None
        # self.nodes = list()

    def insert(self, node, root=None):
        # if not self.nodes:
        #     self.nodes = [obj]
        #     return

        # print(node, root)

        if not self.root:
            self.root = node
            return

        if not root:
            root = self.root

        if node.value < root.value:
            if root.left is None:
                root.left = node
            else:
                self.insert(node, root.left)
        elif node.value > root.value:
            if root.right is None:
                root.right = node
            else:
                self.insert(node, root.right)
        else:
            return

    def in_order_traverse(self, root=None):
        if self.root is None:
            return

    def get_min(self, root=None):
        if root is None:
            root = self.root

        if root.left is None:
            return root.value
        else:
            return self.get_min(root.left)


tree = BinarySearchTree()
values = (8, 3, 10, 1, 6, 14, -100, 4, 7, 13)
# values = (1, 1, 1, 1)
for x in values:
    tree.insert(Node(x))

tree.in_order_traverse()
print(tree.get_min())
# tree.get_min()