Aprenda estruturas de dados básicas em dez dias - Dia 6 (Árvore)

Insira a descrição da imagem aqui

Conceitos básicos de árvores

Uma árvore é uma estrutura de dados hierárquica que consiste em nós conectados entre si de acordo com relacionamentos hierárquicos. As árvores têm os seguintes conceitos básicos:

  • Nó raiz : o nó superior da árvore, que não possui nó pai.

  • Nós filhos : cada nó na árvore pode ter zero ou mais nós filhos.

  • Nó folha : um nó sem nós filhos é chamado de nó folha.

  • Nó pai : todo nó pode ter um nó pai, exceto o nó raiz.

  • Profundidade : O nível em que um nó está localizado é chamado de profundidade. O nó raiz tem profundidade 0, seus nós filhos têm profundidade 1 e assim por diante.

Definição de árvore binária e árvore de pesquisa binária (BST)

Uma árvore binária é um tipo especial de árvore em que cada nó tem no máximo dois filhos: um filho esquerdo e um filho direito.

**Binary Search Tree (BST)** é uma árvore binária na qual cada nó segue as seguintes regras:

  • O valor de todos os nós na subárvore esquerda é menor que o valor do nó atual.

  • O valor de todos os nós na subárvore direita é maior que o valor do nó atual.

Essa ordem torna as árvores de busca binária adequadas para operações de busca e classificação.

Método de passagem de árvore

Atravessar uma árvore significa visitar os nós da árvore em uma determinada ordem. Três métodos comuns de travessia de árvores são os seguintes:

  • Travessia de pré-ordem : primeiro visite o nó raiz e, em seguida, percorra a subárvore esquerda e a subárvore direita em ordem.

  • Percurso em ordem : primeiro percorra a subárvore esquerda, depois visite o nó raiz e, finalmente, percorra a subárvore direita. A travessia em ordem pode ser usada para classificar o BST.

  • Percurso pós-ordem : primeiro percorra a subárvore esquerda, depois percorra a subárvore direita e, finalmente, visite o nó raiz.

Aqui está um exemplo simples de C++ para criar uma árvore binária e realizar travessia em ordem:

#include <iostream>

// 二叉树节点定义
struct TreeNode {
    
    
    int data;           // 节点数据
    TreeNode* left;     // 左子节点
    TreeNode* right;    // 右子节点
};

// 中序遍历函数
void inOrderTraversal(TreeNode* root) {
    
    
    if (root != nullptr) {
    
    
        inOrderTraversal(root->left);
        std::cout << root->data << " ";
        inOrderTraversal(root->right);
    }
}

int main() {
    
    
    // 创建二叉树
    TreeNode* root = new TreeNode{
    
    1, nullptr, nullptr};
    root->left = new TreeNode{
    
    2, nullptr, nullptr};
    root->right = new TreeNode{
    
    3, nullptr, nullptr};

    // 中序遍历
    inOrderTraversal(root);

    return 0;
}

resultado da operação:
Insira a descrição da imagem aqui

Perguntas práticas:

  1. Qual é a diferença entre uma árvore binária e uma árvore binária de pesquisa? Quando você escolheria usar uma árvore de pesquisa binária?

  2. Explique o conceito de travessia em ordem. Por que o percurso em ordem é útil em árvores de pesquisa binária?

  3. Descreve uma situação em que uma estrutura em árvore é mais adequada para armazenar e organizar dados do que uma estrutura de dados linear, como uma matriz ou lista vinculada.

  4. Escreva um programa C++ que crie uma árvore binária simples e execute uma travessia em ordem para gerar o valor do nó.

Qual é a diferença entre uma árvore binária e uma árvore binária de pesquisa? Quando você escolheria usar uma árvore de pesquisa binária?

  • Diferença : A principal diferença é a ordem. Uma árvore binária é uma estrutura em árvore com cada nó tendo no máximo dois nós filhos. A árvore de pesquisa binária (BST) é uma árvore binária especial ordenada. No BST, o valor de todos os nós na subárvore esquerda é menor que o valor do nó atual e o valor de todos os nós na subárvore direita é maior que o valor do nó atual.

  • Casos ao escolher BST : Os casos em que você escolheria usar o BST incluem quando são necessárias operações eficientes de pesquisa e classificação. A natureza ordenada do BST torna a operação de busca muito rápida, com uma complexidade de tempo média de O(log n), onde n é o número de nós na árvore. Além disso, o BST também pode ser usado para implementar aplicações como dicionários e índices de bancos de dados que exigem busca e inserção rápidas.

Explique o conceito de travessia em ordem. Por que o percurso em ordem é útil em árvores de pesquisa binária?

  • A travessia em ordem é um método de travessia de árvore. Seu conceito básico é percorrer os nós da árvore na ordem de subárvore esquerda, nó raiz e subárvore direita. Na travessia em ordem, todos os nós da subárvore esquerda são primeiro percorridos, depois o nó raiz é visitado e, finalmente, todos os nós da subárvore direita são percorridos.

  • A importância da travessia em ordem no BST : No BST, a travessia em ordem pode acessar os nós da árvore em ordem crescente. Isso significa que uma sequência ordenada de nós pode ser obtida por meio de travessia em ordem. Portanto, o percurso em ordem é muito útil no BST, que pode ser usado para implementar operações de classificação na árvore, e também pode ser usado para operações de pesquisa, porque o valor alvo pode ser encontrado rapidamente na sequência ordenada.

Descreve uma situação em que uma estrutura em árvore é mais adequada para armazenar e organizar dados do que uma estrutura de dados linear, como uma matriz ou lista vinculada.

  • Exemplo de cenário : Organizando um sistema de arquivos. Os sistemas de arquivos geralmente usam uma estrutura em árvore para organizar arquivos e pastas. Cada pasta pode conter arquivos e outras pastas, formando uma estrutura em árvore na qual o nó raiz representa o diretório de nível superior e os nós folha representam os arquivos. Essa estrutura em árvore torna o sistema de arquivos fácil de organizar, pesquisar e acessar arquivos.

Nota: Uma estrutura em árvore é mais adequada neste caso porque pode representar claramente o relacionamento hierárquico e a estrutura organizacional entre arquivos, enquanto estruturas de dados lineares (como arrays) geralmente são insuficientes para representar esta complexidade.

Escreva um programa C++ que crie uma árvore binária simples e execute uma travessia em ordem para gerar o valor do nó.

Crie uma árvore binária e execute a travessia em ordem:

#include <iostream>

// 二叉树节点定义
struct TreeNode {
    
    
    int data;           // 节点数据
    TreeNode* left;     // 左子节点
    TreeNode* right;    // 右子节点
};

// 中序遍历函数
void inOrderTraversal(TreeNode* root) {
    
    
    if (root != nullptr) {
    
    
        inOrderTraversal(root->left);
        std::cout << root->data << " ";
        inOrderTraversal(root->right);
    }
}

int main() {
    
    
    // 创建二叉树
    TreeNode* root = new TreeNode{
    
    4, nullptr, nullptr};
    root->left = new TreeNode{
    
    2, nullptr, nullptr};
    root->right = new TreeNode{
    
    6, nullptr, nullptr};
    root->left->left = new TreeNode{
    
    1, nullptr, nullptr};
    root->left->right = new TreeNode{
    
    3, nullptr, nullptr};
    root->right->left = new TreeNode{
    
    5, nullptr, nullptr};
    root->right->right = new TreeNode{
    
    7, nullptr, nullptr};

    // 中序遍历
    inOrderTraversal(root);

    return 0;
}

resultado da operação:Insira a descrição da imagem aqui

Este programa cria uma árvore binária simples e imprime os valores dos nós usando travessia em ordem.

Acho que você gosta

Origin blog.csdn.net/m0_53918860/article/details/133554652
Recomendado
Clasificación