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: 11 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 ::: Pandas Python Library (Biblioteca Python Pandas) ::: DataFrame

Como usar o objeto DataFrame da biblioteca Pandas do Python

Quantidade de visualizações: 1752 vezes
A biblioteca Pandas do Python é uma das preferidas para o estudo e desenvolvimento de soluções envolvendo Big Data, Data Science, Data Mining, Machine Learning, Inteligência Artificial, etc. E o objeto DataFrame é uma das partes mais importantes dessa biblioteca.

Um objeto DataFrame é uma estrutura de dados bidimensional, ou seja, uma tabela contendo linhas e colunas. Nesse formato tabular, que pode ter seu tamanho redimensionado, as informações contidas no objeto DataFrame podem ser atualizadas de acordo com as necessidades do nosso código. Além disso, linhas e colunas podem ser adicionadas ou excluídas em tempo de execução.

A forma mais comum de criarmos um DataFrame é usando o seu construtor. Veja:

----------------------------------------------------------------------
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():
  # conteúdo do DataFrame
  produtos = [['Notebook AB43', 43], ['Tela LED', 87],
    ['Bateria 16 Volts', 120]]

  # vamos construir o DataFrame
  df = pd.DataFrame(produtos, columns=['Produto', 'Estoque'])

  # vamos mostrar o conteúdo do DataFrame
  print(df)

if __name__== "__main__":
  main()

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

            Produto  Estoque
0     Notebook AB43       43
1          Tela LED       87
2  Bateria 16 Volts      120


Aqui nós usamos uma list contendo três lists, ou seja, uma matrix de três linhas e duas colunas. Veja como obter o mesmo resultado usando um dicionário:

----------------------------------------------------------------------
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():
  # conteúdo do DataFrame
  produtos = {'Produto':['Notebook AB43', 'Tela LED', 
    'Bateria 16 Volts'], 'Estoque':[43, 87, 120]}

  # vamos construir o DataFrame
  df = pd.DataFrame(produtos)

  # vamos mostrar o conteúdo do DataFrame
  print(df)

if __name__== "__main__":
  main()

Execute este código e verá que o DataFrame resultante é o mesmo do código anterior.


Python ::: Desafios e Lista de Exercícios Resolvidos ::: Python Básico

Exercícios Resolvidos de Python - Lendo a idade de um nadador e classificando sua categoria como infantil, juvenil, adolescente, adulto ou sênior

Quantidade de visualizações: 196 vezes
Pergunta/Tarefa:

Escreva um programa Python que solicita a idade de um nadador e classifica sua categoria de acordo com as seguintes regras:

a) De 5 a 7 anos - Infantil;
b) De 8 a 10 anos - Juvenil;
c) De 11 a 15 anos - Adolescente;
d) De 16 a 30 anos - Adulto;
e) Acima de 30 anos - Sênior.

Sua saída deverá ser parecida com:

Informe sua idade: 19
Sua categoria é Adulto
Resposta/Solução:

Veja a resolução comentada deste exercício usando Python:

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

# vamos solicitar a idade do nadador
idade = int(input("Informe sua idade: "))
     
# vamos verificar a categoria do nadador
if ((idade >= 5) and (idade <= 7)):
  print("Sua categoria é Infantil")
elif ((idade >= 8) and (idade <= 10)):  
  print("Sua categoria é Juvenil")  
elif ((idade >= 11) and (idade <= 15)):
  print("Sua categoria é Adolescente") 
elif ((idade >= 16) and (idade <= 30)):
  print("Sua categoria é Adulto")  
elif (idade > 30):
  print("Sua categoria é Sênior")  
else:
  print("Não pertence a nenhuma categoria.")



Python ::: Fundamentos da Linguagem ::: Estruturas de Controle

Python para iniciantes - Como contar de 0 a 10 usando o laço for da linguagem Python

Quantidade de visualizações: 10467 vezes
Nesta dica veremos como usar o loop for da linguagem Python para contar de 0 até 10. É um exemplo bem simples, mas serve para nos lembrar da sintáxe dessa construção.

Veja o código completo:

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

# função principal do programa
def main():
  for i in range(11):
    print(i, end = "  ")

if __name__== "__main__":
  main()

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

0 1 2 3 4 5 6 7 8 9 10


Vamos testar seus conhecimentos em JavaScript

Qual é a sintáxe correta para referenciar um arquivo JavaScript externo chamado "auxiliar.js"?

A) <script name="auxiliar.js">

B) <script src="auxiliar.js">

C) <script href="auxiliar.js">
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Java

Analise o seguinte código Java

double a = 0.0 / 0;
System.out.println(a);

Qual é o resultado de sua execução?

A) Infinity

B) NaN

C) Uma exceção java.lang.ArithmeticException: / by zero

D) 0
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica

Equação da continuidade

Um Boeing 747 (figura) tem em torno de 500 m2 de área alar (área total das duas asas). Considere que ele está se movendo a 230 m/s em relação ao ar. As linhas de fluxo acima da asa estão comprimidas em 80% de sua área original. As linhas de fluxo abaixo da asa não estão comprimidas. Calcule a força resultante devido à pressão à qual o Boeing está submetido. Considere a densidade do ar na altitude em que o Boeing está voando ρar = 0,40 kg/m3.



A) 1,27 x 106 N

B) 5,91 kN

C) 2,98 x 106 N

D) 2,20 x 106 N

E) 3,48 x 106 N
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Python

Analise o seguinte código Python

letras = ['ab', 'cd']

for i in range(0, 2):
  letras.append(letras[i].upper())

print(letras)

Qual é o resultado de sua execução?

A) ['ab', 'cd']

B) ['AB', 'CD']

C) ['AB', 'CD', 'AB', 'CD']

D) ['ab', 'cd', 'AB', 'CD']
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em AutoCAD Civil 3D

Survey Points e COGO Points

Cogo points não podem ser editados na janela Properties.

A) Verdadeiro

B) Falso
Verificar Resposta Estudar Cards Todas as Questões

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



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