81 lines
1.8 KiB
Python
Executable File
81 lines
1.8 KiB
Python
Executable File
class Node:
|
|
def __init__(self, info):
|
|
self.info = info
|
|
self.left = None
|
|
self.right = None
|
|
self.level = None
|
|
|
|
def __str__(self):
|
|
return str(self.info)
|
|
|
|
|
|
class BinarySearchTree:
|
|
def __init__(self):
|
|
self.root = None
|
|
|
|
def create(self, val):
|
|
if self.root == None:
|
|
self.root = Node(val)
|
|
else:
|
|
current = self.root
|
|
|
|
while True:
|
|
if val < current.info:
|
|
if current.left:
|
|
current = current.left
|
|
else:
|
|
current.left = Node(val)
|
|
break
|
|
elif val > current.info:
|
|
if current.right:
|
|
current = current.right
|
|
else:
|
|
current.right = Node(val)
|
|
break
|
|
else:
|
|
break
|
|
|
|
|
|
# Enter your code here. Read input from STDIN. Print output to STDOUT
|
|
'''
|
|
class Node:
|
|
def __init__(self,info):
|
|
self.info = info
|
|
self.left = None
|
|
self.right = None
|
|
|
|
|
|
// this is a node of the tree , which contains info as data, left , right
|
|
'''
|
|
|
|
|
|
def lca(root, v1, v2):
|
|
# Enter your code here
|
|
if root is None:
|
|
return None
|
|
if root.info == v1 or root.info == v2:
|
|
return root
|
|
left = lca(root.left, v1, v2)
|
|
right = lca(root.right, v1, v2)
|
|
if left and right:
|
|
return root
|
|
if left is None:
|
|
return right
|
|
else:
|
|
return left
|
|
|
|
|
|
|
|
tree = BinarySearchTree()
|
|
t = int(input())
|
|
|
|
arr = list(map(int, input().split()))
|
|
|
|
for i in range(t):
|
|
tree.create(arr[i])
|
|
|
|
v = list(map(int, input().split()))
|
|
|
|
ans = lca(tree.root, v[0], v[1])
|
|
print(ans.info)
|