package edu.princeton.cs.algs4.growingtree.demos; /** * Randomized Binary Search Tree Deletion Operator * @author Josh Israel */ import edu.princeton.cs.algs4.growingtree.framework.NodeProperties; import edu.princeton.cs.algs4.growingtree.interfaces.IAlgorithmNode; import edu.princeton.cs.algs4.growingtree.interfaces.IDeleteOperator; import edu.princeton.cs.algs4.growingtree.interfaces.IDeletingNode; public class RandomizedBSTDeletion

implements IDeleteOperator

{ private void joinLR(IDeletingNode

d) { IAlgorithmNode

left = d.getLeft(); IAlgorithmNode

right = d.getRight(); if (left == null || right == null) { d.successorHibbardDelete(); return; } double ratio = (double) left.getNodeProperties().getSize() / (left.getNodeProperties().getSize() + right.getNodeProperties().getSize()); boolean promoteLeft = StdRandom.bernoulli(ratio); if (promoteLeft) { d.rotateRight(); joinLR(d); } else { d.rotateLeft(); joinLR(d); } } @Override public void doDelete(IAlgorithmNode

root, IDeletingNode

node) { joinLR(node); } }