[EP05] delete()

[EP05] delete()

por Gabriel Araujo -
Número de respostas: 2

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.

Em resposta à Gabriel Araujo

Re: [EP05] delete()

por Daniel Silva Nunes -

Eu entendi que se um dos filhos de um Node qualquer, com valor nulo ou não, for não nulo, então vc mantém esse node porque ele certamente está compondo outra palavra.

Em resposta à Gabriel Araujo

Re: [EP05] delete()

por José Coelho de Pina -

Ois Daniel e Gabriel,

Legal!

Qual é o comportamento esperado de delete()?

Excelente que vocês estão refletindo sobre a implementação!  aprovo

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

É uma alternativa aceitável.
Remover um nó apenas quando todos seu nós são null.
Como vocês observaram, o ponto aqui é que se x.mid == null, então x.c não faz parte de nenhuma palavra o dicionário.
Portanto, a presença do nó x na TST é supérflua.

ou devemos excluir x e acomodar x.right e x.left de acordo?...

É uma alternativa bacana e mais divertida e desafiadora. mostrando a língua

Qualquer alternativa é aceitável.
Eu acho àquela que realmente remove o nó é mais divertida e instrutiva. maneiro
Na prática, não sei o que é melhor e suponho que como tudo, dependa da aplicação.
Escolham a alternativa que preferírem.