Skip to content

Instantly share code, notes, and snippets.

@DanielTrindade
Last active May 1, 2025 23:46
Show Gist options
  • Save DanielTrindade/dfc8b1f5202992c2f596fd99ca54e46f to your computer and use it in GitHub Desktop.
Save DanielTrindade/dfc8b1f5202992c2f596fd99ca54e46f to your computer and use it in GitHub Desktop.
Melhorias para o exercício 2
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