Perfect Balance - Sedgewick 3.2.25
'''

def PerfectBalance(b, arr):
  arr = sorted(arr)
  return PerfectBalanceHelper(b, arr, 0, len(arr)-1)

def PerfectBalanceHelper(b, arr, lo, hi):
  if lo > hi:
    return b
  mid = lo + (hi - lo)//2
  b.putValue(arr[mid], mid)
  b = PerfectBalanceHelper(b, arr, lo, mid-1)
  b = PerfectBalanceHelper(b, arr, mid+1, hi)
  return b
  
  
if __name__ == '__main__':
  N = int(sys.argv[1])
  arr = []
  for i in range(N):
    v = random.random()
    arr.append(v)
  
  b = BST()
  b = PerfectBalance(b, arr)
  # Check the height of the BST
  print 'Height of the perfect tree = ', b.getHeight()
  # Check if balanced
  print 'Is tree balanced?', b.isBalanced()