quinta-feira, 29 de outubro de 2015

2015/2 - AED2: Árvore Digital em Groovy

Operações:
- Inserir palavra
- Buscar por nó
- remover palavra
- verificar se prefixo existe em árvore
- listar todas as palavras que possuem um prefixo

class No implements Comparable{
char caractere
def nos = [:]
def isTerminal = false
def isRoot = false
int numWords = 0
// nos.sort(it.caractere)
public String toString(){
def sb = ''<<''
if (isRoot){
sb <<= '{numWords: ' + numWords + '] ' 
}
sb <<= caractere
sb <<= " -> "
sb <<= nos
return sb
//this.properties
}

int compareTo(obj){
return caractere - obj.caractere
}

def inserirPalavra(palavra){
if (palavra.length() == 0){
isTerminal = true
return true
}
char letra = palavra[0]
if (palavra.length() > 1){
palavra = palavra.substring(1)
} else {
palavra = ""
}
def no = nos.get(letra)
if (no == null){
no = new No(caractere: letra)
nos.putAt(letra, no)
}
if (isRoot){
numWords++
}
return no.inserirPalavra(palavra)
}

def existePalavra(palavra){
if (palavra.length() == 0){
return true
}
char letra = palavra[0]
if (palavra.length()>1){
palavra = palavra.substring(1)
} else {
 palavra = ''
}
def no = obterNo(letra)
if (no != null){
return no.existePalavra(palavra)
} else {
return false
}
}

def obterNo(letra){
for (no in nos){
if (no.caractere == letra){
return no
}
}
return null
}

}

def a = new No(caractere: '*', isRoot: true)
def b = new No(caractere: 'b')
def f = new No(caractere: 'f')

println 'Arvore digital vazia'
println a

def palavra = 'casa'
a.inserirPalavra(palavra)

println 'Arvore digital com uma palavra'

println a

def palavras = ["the", "book", "table", "tablet"]
for (l in palavras){
println 'Adding word: ' + l
a.inserirPalavra(l)
}

println a

Nenhum comentário:

Postar um comentário