1. They are the strings that have no repeated characters. (See https://en.wikipedia.org/wiki/Isogram) 2. def median(tree): return select(root, root.subtreeSize / 2) def select(node, k): if node.left.subtreeSize < k: return select(node.left, k) else if node.left.subtreeSize = k: return node else return select(node.right, k - node.left.subtreeSize - 1) 3. Instead of having total list length n(1 + 1/2 + 1/4 + 1/8 + ...) = 2n, we would have total list length n(1 + 1/3 + 1/9 + 1/27 + ...) = 1.5n, so we would decrease the space by a factor of 3/4. However, we could potentially have to take two steps backward for every step down in a search, instead of only one step backward, increasing the length of the worst-case search from 2*(number of lists) to 3*(number of lists), an increase by a factor of 3/2.