Introdução à árvore binária: conceitos, terminologias e implementação

Como um desenvolvedor experiente com mais de 30 anos de carreira na área de tecnologia, eu tive a oportunidade de trabalhar com uma variedade de algoritmos e estruturas de dados ao longo dos anos. Um dos mais importantes e úteis para resolver muitos problemas de programação é a Árvore Binária de Busca.

O que é uma Árvore Binária de Busca?

Uma Árvore Binária de Busca é uma estrutura de dados que permite armazenar e pesquisar informações de maneira eficiente. É composta por nós que podem ter até dois filhos, um à esquerda e outro à direita. Cada nó na árvore contém um valor único e os nós à esquerda têm valores menores do que o nó pai, enquanto os nós à direita têm valores maiores.

Uma simples árvore binária de tamanho 9 e altura 3, com um nó raiz de valor 2. A árvore acima não está balanceada (elemento 5 possui 2 filhos a direita e nenhum a esquerda), nem está ordenada – notar que não é uma árvore binária de procura. – Fonte: Wikipedia

A estrutura da árvore binária de busca permite uma busca eficiente em tempo logarítmico, ou seja, O(log n), onde n é o número de elementos na árvore. Essa eficiência é alcançada porque a árvore é estruturada de tal forma que as comparações para encontrar um elemento são realizadas em caminhos únicos e ordenados.

Exemplo de implementação em C#

Veja um exemplo simples de uma árvore binária de busca implementada em C#:

C#
public class Node
{
    public int Value;
    public Node Left;
    public Node Right;

    public Node(int value)
    {
        Value = value;
        Left = null;
        Right = null;
    }
}

public class BinarySearchTree
{
    public Node Root;

    public BinarySearchTree()
    {
        Root = null;
    }

    public void Insert(int value)
    {
        Node node = new Node(value);
        if (Root == null)
        {
            Root = node;
        }
        else
        {
            Node currentNode = Root;
            while (true)
            {
                if (value < currentNode.Value)
                {
                    if (currentNode.Left == null)
                    {
                        currentNode.Left = node;
                        break;
                    }
                    currentNode = currentNode.Left;
                }
                else
                {
                    if (currentNode.Right == null)
                    {
                        currentNode.Right = node;
                        break;
                    }
                    currentNode = currentNode.Right;
                }
            }
        }
    }
}

// Fonte: Chat GPT
C#

A classe Node representa um nó da árvore, que contém um valor inteiro (Value) e duas referências a outros nós, um para o filho à esquerda (Left) e outro para o filho à direita (Right).

A classe BinarySearchTree é a árvore em si, e contém uma referência para o nó raiz (Root). A classe oferece um método Insert que insere um novo nó na árvore. Esse método começa procurando o lugar correto para inserir o novo nó, percorrendo a árvore a partir do nó raiz e seguindo sempre para a esquerda se o valor do novo nó for menor que o valor do nó atual, ou para a direita se for maior ou igual.

Exemplo de implementação em Java

Confira o mesmo código implementado em Java:

Java
public class Node {
    public int value;
    public Node left;
    public Node right;

    public Node(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

public class BinarySearchTree {
    public Node root;

    public BinarySearchTree() {
        this.root = null;
    }

    public void insert(int value) {
        Node node = new Node(value);
        if (root == null) {
            root = node;
        } else {
            Node currentNode = root;
            while (true) {
                if (value < currentNode.value) {
                    if (currentNode.left == null) {
                        currentNode.left = node;
                        break;
                    }
                    currentNode = currentNode.left;
                } else {
                    if (currentNode.right == null) {
                        currentNode.right = node;
                        break;
                    }
                    currentNode = currentNode.right;
                }
            }
        }
    }
}

// Fonte: Chat GPT
Java

Note que a estrutura da classe Node é a mesma, com os atributos value, left e right. Já a classe BinarySearchTree também é semelhante, com o atributo root, o construtor que inicializa o atributo como null, e o método insert que insere um novo nó na árvore seguindo as regras de uma árvore binária de busca.

Exemplo de implementação em Python

Confira o mesmo código implementado em Python:

Python
class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

class BinarySearchTree:
    def __init__(self):
        self.root = None

    def insert(self, value):
        node = Node(value)
        if not self.root:
            self.root = node
        else:
            current_node = self.root
            while True:
                if value < current_node.value:
                    if not current_node.left:
                        current_node.left = node
                        break
                    current_node = current_node.left
                else:
                    if not current_node.right:
                        current_node.right = node
                        break
                    current_node = current_node.right

# Fonte: Chat GPT
Python

O código acima define a classe Node, que é utilizada para representar um nó na árvore.

Cada nó tem um valor e referências para seus filhos esquerdo e direito. A classe “BinarySearchTree” é usada para criar e manipular a árvore binária de busca. O método “insert” é utilizado para inserir um novo valor na árvore. A implementação utiliza um loop “while” para navegar pela árvore e encontrar o local correto para inserir o novo nó.

Aplicações

As árvores binárias de busca são amplamente utilizadas em algoritmos de busca, ordenação e filtragem de dados. Alguns exemplos de aplicação são:

  • Implementação de dicionários e tabelas de símbolos;
  • Implementação de algoritmos de ordenação como o mergesort;
  • Implementação de algoritmos de busca binária;
  • Seleção de elementos em um intervalo de valores;
  • Rastreamento de informações hierárquicas em uma estrutura organizacional.

Conclusão

As árvores binárias de busca são uma estrutura de dados fundamental na ciência da computação e podem ser usadas para resolver uma variedade de problemas de programação. Elas permitem uma busca eficiente e são facilmente implementadas em várias linguagens de programação.

Esse conteúdo é parte do material disponibilizado para os participantes do meu grupo de estudos de Algoritmos e Estruturas de Dados. Você quer participar desse grupo? Clique aqui e veja como funciona.

Quer se aprofundar neste tema?

Então participe do grupo de estudos de Algoritmos e Estruturas de Dados.

Domine algoritmos e estruturas de dados, torne-se um desenvolvedor de software “além do básico” e diferencie-se no mercado.

Participe do
grupo intensivo de

Algoritmos e Estruturas de Dados

com

Domine algoritmos e estruturas de dados, torne-se um desenvolvedor de software “além do básico” e diferencie-se no mercado.

Participe do
grupo intensivo de

Algoritmos e Estruturas de Dados

com

Domine algoritmos e estruturas de dados, torne-se um desenvolvedor de software “além do básico” e diferencie-se no mercado.

Veja outros artigos relacionados

O Código de Huffman: Uma Transcrição Explicativa

A compressão de dados é um assunto que fascina pela sua capacidade de transformar a maneira como armazenamos e transferimos...

A Relação entre Programação Funcional e Concorrência

A programação funcional vem ganhando espaço na comunidade de tecnologia. Por que isso acontece? Este artigo explora essa popularidade, focando...

Nomes Assustadores para Conceitos Simples

No mundo da tecnologia e da computação, frequentemente nos deparamos com termos que parecem complexos e intimidantes. Vou compartilhar uma...

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de DDD do Jeito Certo:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Programa ElemarJR de Aceleração, Do Jeito Certo:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Programa ElemarJR de Aceleração, Do Jeito Certo:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de DDD do Jeito Certo:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de DDD do Jeito Certo:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:

Mentoria em Arquitetura de Software

Ênfase em Systems Design

Para se candidatar nesta turma aberta, preencha o formulário a seguir:

Reproduzir vídeo

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no curso de Introdução à árvore binária: conceitos, terminologias e implementação:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no curso de Introdução à árvore binária: conceitos, terminologias e implementação:

Introdução à árvore binária: conceitos, terminologias e implementação

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no curso de Introdução à árvore binária: conceitos, terminologias e implementação:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de DDD do Jeito Certo:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:

Crie sua conta

Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:

× Precisa de ajuda?