#!/usr/bin/env python3
""" 4.2 Minimal Tree """

from binary_tree import Node


def constructMinBst(vals):
    """ Given a sorted list of unique integers, this returns a binary search tree of minimum height. """
    def recurse(i, j):
        if j - i == 0:
            return None

        mid = j // 2 + i // 2
        root = Node(val=vals[mid])
        root.left = recurse(i, mid)
        root.right = recurse(mid + 1, j)
        return root

    return recurse(0, len(vals))


Node.print(constructMinBst([1, 2]))
Node.print(constructMinBst([1, 2, 3]))
Node.print(constructMinBst([1, 2, 3, 4]))
Node.print(constructMinBst([1, 2, 3, 4, 5]))
Node.print(constructMinBst([1, 2, 3, 4, 5, 6]))