Sobes.tech
Junior — Middle

Explique la procédure de transformation d'un arbre binaire pour éliminer les données redondantes et assurer l'unicité des éléments.

sobes.tech IA

Réponse de l'IA

Pour éliminer les données redondantes et assurer l’unicité des éléments dans un arbre binaire, on applique généralement une transformation en une structure de données appelée arbre binaire de recherche (BST) ou ses variations.

La procédure peut inclure les étapes suivantes :

  1. Parcours de l’arbre — par exemple, en utilisant un parcours en ordre (in-order traversal), pour obtenir tous les éléments.
  2. Suppression des doublons — lors du parcours, on peut stocker les éléments dans une structure de données qui n’autorise pas les répétitions (par exemple, un ensemble).
  3. Construction d’un nouvel arbre — à partir des éléments uniques, on crée un nouvel arbre binaire de recherche, où chaque élément est placé de manière à ce que pour chaque nœud, tous les éléments du sous-arbre gauche soient inférieurs et ceux du sous-arbre droit, supérieurs.

Cela garantit :

  • L’unicité des éléments.
  • Une recherche, insertion et suppression rapides des éléments.

Exemple en 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
}

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

Ainsi, la transformation de l’arbre binaire inclut un parcours, une filtration des valeurs uniques et la construction d’un nouvel arbre avec des éléments uniques.