Advertisement
vkazar

Untitled

Sep 9th, 2024
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.48 KB | None | 0 0
  1. // <template>
  2. class Node(var left: Node?, var right: Node?, var value: Int)
  3. // <template>
  4.  
  5. fun remove(root: Node?, key: Int): Node? {
  6.  
  7.     if (root == null) return null
  8.     if (root.value == key) return connectChildTrees(root)
  9.  
  10.     if (root.value > key) {
  11.         root.left = remove(root.left, key)
  12.     } else {
  13.         root.right = remove(root.right, key)
  14.     }
  15.     return root
  16. }
  17.  
  18. private fun connectChildTrees(toDel: Node): Node? {
  19.     if (toDel.left == null) return toDel.right
  20.     if (toDel.right == null) return toDel.left
  21.  
  22.     var connectorParent = toDel
  23.     var connector = toDel.left!!
  24.     while (connector.right != null) {
  25.         connectorParent = connector
  26.         connector = connector.right!!
  27.     }
  28.  
  29.     // Проверка корнер-кейса, когда самым правым потомком (коннектором) из левой ветви удаляемой вершины получился
  30.     // левый ребёнок удаляемой вершины.
  31.     if (connectorParent === toDel) {
  32.         // В таком случае у коннектора нет правого ребёнка
  33.         assert(connector.right == null)
  34.         // И им должен стать правый ребёнок удаляемой вершины
  35.         connector.right = toDel.right
  36.     } else {
  37.         connectorParent.right = connector.left
  38.         connector.left = toDel.left
  39.         connector.right = toDel.right
  40.     }
  41.  
  42.     return connector
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement