Você está aqui: Python ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca

Como percorrer uma árvore binária em Python usando o algorítmo depth-first search (DFS) de forma iterativa

Quantidade de visualizações: 85 vezes
Nesta dica mostrarei como podemos implementar o algorítmo da Busca em Profundidade (DFS, do inglês depth-first search) em Python de forma iterativa, ou seja, sem usar recursividade. Não farei a busca, mas sim o percurso, para que você entenda como a lógica dessa busca funciona.

Antes de iniciarmos, veja a árvore binária que vamos usar no exemplo:



Note que esta árvore possui seis nós. O nó 5 é o nó raiz, e possui como filhos os nós 4 e 9. O nó 4, por sua vez, possui apenas um filho, o nó 2, ou seja, o filho da esquerda. O nó 9 possui dois filhos: o nó 3 é o filho da esquerda e o nó 12 é o filho da direita. Os filhos da árvore binária que não possuem outros filhos são chamados de folhas.

Com a abordagem da busca em profundidade, começamos com o nó raiz e viajamos para baixo em uma única ramificação. Se o nó desejado for encontrado naquela ramificação, ótimo. Do contrário, continuamos subindo e pesquisando por nós não visitados. Esse tipo de busca também tem uma notação big O de O(n).

Vamos à implementação? Veja o código para a classe No, que representa um nó na árvore binária:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# implementação da classe No
class No:
  # construtor da classe
  def __init__(self, valor):
    # o valor do nó
    self.valor = valor
    # o filho da esquerda
    self.esquerdo = None
    # o filho da direita
    self.direito = None

Veja agora o código completo para o exemplo. Note que usei uma implementação não-recursiva, na qual todos os nós expandidos recentemente são adicionados a uma pilha, para realizar a exploração. O uso da pilha permite o retrocesso (backtracking) de forma a reiniciarmos o percurso ou busca no próximo nó.

Para manter o código o mais simples possível, eu usei a classe List do Python, juntamente com seus métodos append() e pop() para simular a pilha. Usei também uma List para guardar os valores da árvore binária na ordem depth-first.

Eis o código:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# implementação da classe No
class No:
  # construtor da classe
  def __init__(self, valor):
    # o valor do nó
    self.valor = valor
    # o filho da esquerda
    self.esquerdo = None
    # o filho da direita
    self.direito = None
  
# função principal do programa Python
def main():
  # vamos criar os nós da árvore
  cinco = No(5) # será a raiz da árvore
  quatro = No(4)
  nove = No(9)
  dois = No(2)
  tres = No(3)
  doze = No(12)
    
  # vamos fazer a ligação entre os nós
  cinco.esquerdo = quatro
  cinco.direito = nove
  quatro.esquerdo = dois
  nove.esquerdo = tres
  nove.direito = doze

  # agora já podemos efetuar o percurso depth-first
  valores = percurso_depth_first(cinco)
  print("Os valores na ordem Depth-First são: {0}".format(valores))
  
# função que permite realizar a pesquisa depth-first search (DFS)
def percurso_depth_first(no):
  # vamos usar uma List para retornar os elementos
  # na ordem Depth-First
  valores = list()
    
  # vamos criar uma nova instância de uma list para representar uma pilha
  pilha = list()
  # já vamos adicionar o primeiro nó recebido, que é a raiz
  pilha.append(no)
    
  # enquanto a pilha não estiver vazia
  while len(pilha) > 0:
    # vamos obter o elemento no topo da pilha
    atual = pilha.pop()
    # adicionamos este valor na List
    valores.append(atual.valor)

    # vamos colocar o filho direito na pilha
    if atual.direito != None:
      pilha.append(atual.direito)
      
    # vamos colocar o filho esquerdo na pilha
    if atual.esquerdo != None:
      pilha.append(atual.esquerdo)
    
  return valores # retorna os valores da árvore

if __name__== "__main__":
  main()

Ao executarmos este código Python nós teremos o seguinte resultado:

Os valores na ordem Depth-First são: [5, 4, 2, 9, 3, 12]

Compare estes valores com a imagem vista anteriormente para entender ainda melhor o percurso ou busca Depth-First.

Link para compartilhar na Internet ou com seus amigos:

Python ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como calcular o arco cosseno de um número em Python usando o método acos() do módulo math

Quantidade de visualizações: 3324 vezes
O arco cosseno, (também chamado de cosseno inverso) pode ser representado por cos-1 x, arccos x ou acos x. Esta função é a inversa do cosseno, ou seja, se o cosseno é a relação entre o cateto adjacente ao ângulo e a hipotenusa, o arco cosseno parte desta relação para encontrar o valor do ângulo.

Em Python, o arco cosseno de um número pode ser obtido por meio do método acos() da classe Math. Este método recebe um valor double e retorna também um double, na faixa 0 <= x <= PI, onde PI vale 3.1416.

Veja um código Python completo no qual informamos um número e em seguida calculamos o seu arco-cosseno:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# vamos importar o módulo Math
import math as math

def main():
  numero = 0.5
  print("O arco cosseno de %f é %f" % (numero, math.acos(numero)))
  
if __name__== "__main__":
  main()

Ao executar este código nós teremos o seguinte resultado:

O arco cosseno de 0.500000 é 1.047198

Não se esqueça de que as funções trigonométricas são usadas para modelar o movimento das ondas e fenômenos periódicos, como padrões sazonais. Elas formam a base para análises avançadas em engenharia elétrica, processamento digital de imagem, radiografia, termodinâmica, telecomunicações e muitos outros campos da ciência e da tecnologia.


Python ::: Pandas Python Library (Biblioteca Python Pandas) ::: DataFrame

Como acessar uma linha específica em um DataFrame do Pandas da linguagem Python usando o método iloc()

Quantidade de visualizações: 10947 vezes
Em várias situações nós precisamos investigar o conteúdo de uma determinada linha, ou seja, um registro específico contido em um DataFrame do Pandas. Para isso podemos usar o método iloc() do objeto DataFrame.

Este método recebe um valor inteiro representando o índice da linha a ser retornada. É possível também fornecer uma list contendo vários índices, e até mesmo intervalos, mas isso é assunto para outras dicas. O retorno do método é uma Series ou um DataFrame, dependendo dos parâmetros usados.

Vamos ver um exemplo? Analise o código a seguir:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# importamos a biblioteca Pandas
import pandas as pd
 
def main():
  # vamos carregar os dados do arquivo .csv
  dados = pd.read_csv("emprestimos.csv",
   delimiter=";")
 
  # vamos mostrar o DataFrame resultante
  print(dados)

  # agora vamos mostrar o conteúdo da terceira linha
  linha = dados.iloc[2]
 
  # mostramos o conteúdo da terceira linha
  print("\nConteúdo da terceira linha:\n")
  print(linha)

if __name__== "__main__":
  main()

Ao executarmos este código nós teremos o seguinte resultado:

    id         nome  idade sexo  renda  valor  parc  pont ap
0    1    HELENA508     39    F   6500   8000     6    87  S
1    2   JESSICA631     65    F   3000    500    48     2  N
2    3    FELIPE768     39    M  10200  20000    24    40  S
3    4    AMANDA515     90    F    800   1500    30    87  N
4    5     LAURA312     61    F   1800  15000    50     8  N
5    6    CARLOS291     84    M    970  11000     6    59  N
6    7    CARLOS859     64    F    970    500    12     1  N

Conteúdo da terceira linha:

id               3
nome     FELIPE768
idade           39
sexo             M
renda        10200
valor        20000
parc            24
pont            40
ap               S
Name: 2, dtype: object


Veja que o conteúdo da linha é exibido na vertical. Se quisermos exibí-lo na horizontal, basta passarmos o índice da linha como uma list. Veja:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# agora vamos mostrar o conteúdo da terceira linha
linha = dados.iloc[[2]]

Agora o resultado será:

Conteúdo da terceira linha:

   id       nome  idade sexo  renda  valor  parc  pont ap
2   3  FELIPE768     39    M  10200  20000    24    40  S


Para testarmos se o retorno do método iloc() foi mesmo uma Series, basta usarmos a função type() do Python:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# vamos checar o retorno do método iloc()
linha = dados.iloc[[2]]
print("Tipo do retorno:", type(linha))

Este código exibirá um resultado parecido com:

Tipo do retorno: <class 'pandas.core.frame.DataFrame'>


Python ::: Dicas & Truques ::: Data e Hora

Como adicionar dias à uma data em Python usando a função timedelta() da classe datetime

Quantidade de visualizações: 8922 vezes
Nesta dica mostrarei como é possível usar o método timedelta() da classe datetime do Python para adicionar um determinado número de dias a uma data. O truque aqui é fornecer apenas o dia para o método timedelta(), obter o resultado e somá-lo com a data que já temos.

Veja o código completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

import datetime

# função principal do programa
def main():
  # dias a serem adicionados
  quant_dias = 2
 
  # Obtém a data de hoje
  hoje = datetime.date.today()
  print("Hoje é:", hoje)
 
  # Adiciona dias à data
  dias = datetime.timedelta(days=quant_dias)
  hoje = hoje + dias
 
  # Exibe o resultado
  print("Daqui à", quant_dias, "dias será", hoje)
 
if __name__== "__main__":
  main()

Ao executarmos este código Python nós teremos o seguinte resultado:

Hoje é: 2021-03-11
Daqui à 2 dias será 2021-03-13


Desafios, Exercícios e Algoritmos Resolvidos de Python

Veja mais Dicas e truques de Python

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 33 usuários muito felizes estudando em nosso site.