#!/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()
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwojIC0qLSBjb2Rpbmc6IFVURi04IC0qLQoKCmNsYXNzIE5vZGUob2JqZWN0KToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIGxlZnQ9Tm9uZSwgcmlnaHQ9Tm9uZSk6CiAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdAogICAgICAgIHNlbGYucmlnaHQgPSByaWdodAoKCmNsYXNzIEJpbmFyeVNlYXJjaFRyZWUob2JqZWN0KToKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5yb290ID0gTm9uZQogICAgICAgICMgc2VsZi5ub2RlcyA9IGxpc3QoKQoKICAgIGRlZiBpbnNlcnQoc2VsZiwgbm9kZSwgcm9vdD1Ob25lKToKICAgICAgICAjIGlmIG5vdCBzZWxmLm5vZGVzOgogICAgICAgICMgICAgIHNlbGYubm9kZXMgPSBbb2JqXQogICAgICAgICMgICAgIHJldHVybgoKICAgICAgICAjIHByaW50KG5vZGUsIHJvb3QpCgogICAgICAgIGlmIG5vdCBzZWxmLnJvb3Q6CiAgICAgICAgICAgIHNlbGYucm9vdCA9IG5vZGUKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGlmIG5vdCByb290OgogICAgICAgICAgICByb290ID0gc2VsZi5yb290CgogICAgICAgIGlmIG5vZGUudmFsdWUgPCByb290LnZhbHVlOgogICAgICAgICAgICBpZiByb290LmxlZnQgaXMgTm9uZToKICAgICAgICAgICAgICAgIHJvb3QubGVmdCA9IG5vZGUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNlbGYuaW5zZXJ0KG5vZGUsIHJvb3QubGVmdCkKICAgICAgICBlbGlmIG5vZGUudmFsdWUgPiByb290LnZhbHVlOgogICAgICAgICAgICBpZiByb290LnJpZ2h0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICByb290LnJpZ2h0ID0gbm9kZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2VsZi5pbnNlcnQobm9kZSwgcm9vdC5yaWdodCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4KCiAgICBkZWYgaW5fb3JkZXJfdHJhdmVyc2Uoc2VsZiwgcm9vdD1Ob25lKToKICAgICAgICBpZiBzZWxmLnJvb3QgaXMgTm9uZToKICAgICAgICAgICAgcmV0dXJuCgogICAgZGVmIGdldF9taW4oc2VsZiwgcm9vdD1Ob25lKToKICAgICAgICBpZiByb290IGlzIE5vbmU6CiAgICAgICAgICAgIHJvb3QgPSBzZWxmLnJvb3QKCiAgICAgICAgaWYgcm9vdC5sZWZ0IGlzIE5vbmU6CiAgICAgICAgICAgIHJldHVybiByb290LnZhbHVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X21pbihyb290LmxlZnQpCgoKdHJlZSA9IEJpbmFyeVNlYXJjaFRyZWUoKQp2YWx1ZXMgPSAoOCwgMywgMTAsIDEsIDYsIDE0LCAtMTAwLCA0LCA3LCAxMykKIyB2YWx1ZXMgPSAoMSwgMSwgMSwgMSkKZm9yIHggaW4gdmFsdWVzOgogICAgdHJlZS5pbnNlcnQoTm9kZSh4KSkKCnRyZWUuaW5fb3JkZXJfdHJhdmVyc2UoKQpwcmludCh0cmVlLmdldF9taW4oKSkKIyB0cmVlLmdldF9taW4oKQ==