-
-
Save DanielTrindade/dfc8b1f5202992c2f596fd99ca54e46f to your computer and use it in GitHub Desktop.
Melhorias para o exercício 2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def insere(arvore, valor): | |
if arvore is None: | |
arvore = cria_no(valor) | |
elif arvore['valor'] > valor: | |
arvore['esq'] = insere(arvore['esq'], valor) | |
else: | |
arvore['dir'] = insere(arvore['dir'], valor) | |
return arvore | |
def cria_arvore(): | |
return None | |
def cria_no(valor): | |
return {'valor': valor, 'esq': None, 'dir': None} | |
def busca_bin(arv, chave): | |
if arv is None: | |
return None | |
if arv['valor'] is chave: | |
return arv | |
if arv['valor'] > chave: | |
return busca_bin(arv['esq'], chave) | |
else: | |
return busca_bin(arv['dir'], chave) | |
#mudar o nome da função aqui não é pra buscar a folha mas sim o valor do nó mais a direita | |
#sugestão: algo como encontrar_maximo | |
def busca_folhaDir(arv): | |
#reduzir a complexidade ciclomática aqui dá pra combinar as duas condições em uma | |
''' | |
ex: if not arv and not arv['esq']: | |
''' | |
#ou até mesmo modificar podendo retornar None | |
''' | |
if not arv: | |
return None | |
if not arv['dir']: | |
return arv | |
return busca_folhaDir(arv['dir']) | |
''' | |
if arv is not None: | |
if arv['dir'] is not None: | |
arv = busca_folhaDir(arv['dir']) | |
return arv | |
#mudar o nome da função aqui não é pra buscar a folha mas sim o valor do nó mais a esquerda | |
#sugestão: encontrar_minimo | |
def busca_folhaEsq(arv): | |
#reduzir a complexidade ciclomática aqui dá pra combinar as duas condições em uma | |
''' | |
ex: if not arv and not arv['esq']: | |
''' | |
#ou até mesmo modificar podendo retornar None | |
''' | |
if not arv: | |
return None | |
if not arv['esq']: | |
return arv | |
return busca_folhaEsq(arv['esq']) | |
''' | |
if arv is not None: | |
if arv['esq'] is not None: | |
arv = busca_folhaEsq(arv['esq']) | |
return arv | |
def antecessor(arv, chave): | |
if arv is None: | |
return None | |
#usar o operador == ao invés do is | |
#o is compara a identidade(ID) dos objetos em memória e não o valor | |
if arv['valor'] is chave: | |
return busca_folhaDir(arv['esq']) | |
if arv['valor'] < chave: | |
return antecessor(arv['dir'], chave) | |
else: | |
return antecessor(arv['esq'], chave) | |
def sucessor(arv, chave): | |
if arv is None: | |
return None | |
#usar o operador == ao invés do is | |
#o is compara a identidade(ID) dos objetos em memória e não o valor | |
if arv['valor'] is chave: | |
return busca_folhaEsq(arv['dir']) | |
if arv['valor'] < chave: | |
return sucessor(arv['dir'], chave) | |
else: | |
return sucessor(arv['esq'], chave) | |
chaves = eval(input()) | |
chaves_Busca = eval(input()) | |
arvore = cria_arvore() | |
for i in chaves: | |
arvore = insere(arvore, i) | |
for i in chaves_Busca: | |
suce = sucessor(arvore, i) | |
ante = antecessor(arvore, i) | |
arv = busca_bin(arvore, i) | |
#usar a formatação de literal string aqui | |
#ex: | |
#print(f"Chave {arv['valor']} tem antecessor {ante['valor']} e sucessor {suce['valor']}") | |
#fica melhor de exibir e dá pra colocar expressões mais complexas | |
print("Chave", arv['valor'], "tem antecessor", ante['valor'], "e sucessor", suce['valor']) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment