def test_inorder(): inorder_nodes = [0,2,3,4,5,6,7,8,9] arr_elements = [6,2,8,0,4,7,9,3,5] tree = BinarySearchTree() for i in range(len(arr_elements)): tree.create(arr_elements[i]) inorder(tree.root) for i in range(len(inorder_nodes)): assert inorder_nodes[i] == nodes[i]
def test_lca(): arr_elements = [6, 2, 8, 0, 4, 7, 9, 3, 5] tree = BinarySearchTree() for i in range(len(arr_elements)): tree.create(arr_elements[i]) lca_node = lca(tree.root, 2, 8) assert lca_node.info == 6 lca_node = lca(tree.root, 2, 4) assert lca_node.info == 2
def lca(root, v1, v2): global lca_root print(root.info) lca_root = root # Current root node is higher than both values; traverse left subtree if root.info > v1 and root.info > v2: lca(root.left, v1, v2) # Current root node is lower than both values; traverse right subtree if root.info < v1 and root.info < v2: lca(root.right, v1, v2) return lca_root if __name__ == '__main__': 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)