Beispiel #1
0
 private AvlNode<E> deleteMe() {
   int oldElemCount = this.elemCount;
   this.elemCount = 0;
   successor(pred, succ);
   if (left == null) {
     return right;
   } else if (right == null) {
     return left;
   } else if (left.height >= right.height) {
     AvlNode<E> newTop = pred;
     // newTop is the maximum node in my left subtree
     newTop.left = left.removeMax(newTop);
     newTop.right = right;
     newTop.distinctElements = distinctElements - 1;
     newTop.totalCount = totalCount - oldElemCount;
     return newTop.rebalance();
   } else {
     AvlNode<E> newTop = succ;
     newTop.right = right.removeMin(newTop);
     newTop.left = left;
     newTop.distinctElements = distinctElements - 1;
     newTop.totalCount = totalCount - oldElemCount;
     return newTop.rebalance();
   }
 }
Beispiel #2
0
 // Removes the minimum node from this subtree to be reused elsewhere
 private AvlNode<E> removeMin(AvlNode<E> node) {
   if (left == null) {
     return right;
   } else {
     left = left.removeMin(node);
     distinctElements--;
     totalCount -= node.elemCount;
     return rebalance();
   }
 }