Junior — Middle
Izskaidrojiet binārās koka pārveidošanas procedūru, lai novērstu liekus datus un nodrošinātu elementu unikālitāti.
sobes.tech AI
Atbilde no AI
Lai novērstu lieko datus un nodrošinātu elementu unikālitāti binārajā kokā, parasti tiek izmantota datu struktūras pārveidošana, ko sauc par bināro meklēšanas koku (BST) vai tā variācijām.
Procedūra var ietvert šādus soļus:
- Koka apmeklējums — piemēram, dziļuma pirmais apmeklējums (in-order traversal), lai iegūtu visus elementus.
- Dublikātu dzēšana — apmeklējuma laikā var saglabāt elementus datu struktūrā, kas nepieļauj atkārtojumus (piemēram, kopu).
- Jauna koka būvēšana — balstoties uz unikālajiem elementiem, tiek izveidots jauns binārais meklēšanas koks, kur katrs mezgls ir izvietots tā, lai katrā mezglā visi elementi ir mazāki par kreisajā apakškokā, bet lielāki — labajā.
Tas nodrošina:
- Elementu unikālitāti.
- Ātru meklēšanu, ievietošanu un dzēšanu.
Piemērs 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
}
// Lietošana:
var elements = [Int]()
inorderTraversal(originalRoot, &elements)
let uniqueElements = Array(Set(elements)).sorted()
let newRoot = buildBST(uniqueElements)
Tādējādi binārā koka pārveidošana ietver apmeklējumu, unikālo vērtību filtrēšanu un jauna koka būvēšanu ar unikālajiem elementiem.