type
  ElementKind = enum inner, leaf
  TElement[TKey, TData] = object
    case kind: ElementKind
    of inner:
      key: TKey
      left, right: ref TElement[Tkey, TData]
    of leaf:
      data: ref TData