Olá,
Qual é o comportamento esperado de delete()? Por exemplo, para um determinado Node x, onde x.val == null, x.mid == null mas x.left != null e x.right != null, o que deve ser feito? Podemos simplesmente deixar o Node na TST, já que ele tem links para outras palavras, ou devemos excluir x e acomodar x.right e x.left de acordo? Nesse caso específico, como acomodaríamos os Nodes afim de que nenhuma palavra seja perdida? Imagino que dependa do char armazenado no antecessor de x e que seja parecido com o delMin() de uma bst, mas mesmo assim, não tenho certeza de como fazer essa mudança sem perder alguma palavra.