Sobes.tech
Junior — Middle

Explique o procedimento de transformação de uma árvore binária para eliminar dados redundantes e garantir a singularidade dos elementos.

sobes.tech IA

Resposta da IA

Para eliminar dados redundantes e garantir a unicidade dos elementos numa árvore binária, geralmente aplica-se uma transformação numa estrutura de dados chamada árvore binária de pesquisa (BST) ou suas variações.

O procedimento pode incluir os seguintes passos:

  1. Percurso da árvore — por exemplo, usando um percurso em ordem (in-order traversal), para obter todos os elementos.
  2. Remoção de duplicados — durante o percurso, pode-se guardar os elementos numa estrutura de dados que não permite repetições (por exemplo, um conjunto).
  3. Construção de uma nova árvore — com base nos elementos únicos, cria-se uma nova árvore binária de pesquisa, onde cada elemento é colocado de modo que, para cada nó, todos os elementos na subárvore esquerda sejam menores e na direita, maiores.

Isto garante:

  • A unicidade dos elementos.
  • Pesquisa, inserção e remoção rápidas de elementos.

Exemplo em Swift (iOS):

class TreeNode {
    var value: Int
    var left: TreeNode?
    var right: TreeNode?

    init(_ value: Int) {
        self.value = value
    }
}

func inorderTraversal(_ root: TreeNode?, _ result: inout [Int]) {
    guard let node = root else { return }
    inorderTraversal(node.left, &result)
    result.append(node.value)
    inorderTraversal(node.right, &result)
}

func buildBST(_ values: [Int]) -> TreeNode? {
    var root: TreeNode?
    for value in values {
        root = insertIntoBST(root, value)
    }
    return root
}

func insertIntoBST(_ root: TreeNode?, _ value: Int) -> TreeNode? {
    guard let node = root else { return TreeNode(value) }
    if value < node.value {
        node.left = insertIntoBST(node.left, value)
    } else if value > node.value {
        node.right = insertIntoBST(node.right, value)
    }
    return node
}

// Uso:
var elements = [Int]()
inorderTraversal(originalRoot, &elements)
let uniqueElements = Array(Set(elements)).sorted()
let newRoot = buildBST(uniqueElements)

Assim, a transformação de uma árvore binária inclui percurso, filtragem de valores únicos e construção de uma nova árvore com elementos únicos.