private node <T> insert(node <T> temp, node <T> New) { if (temp == null) { return(New); } if (temp < New) { temp.right = insert(temp.right, New); if (temp.right.value() > temp.value()) { temp.left_rotation(ref temp); } } else if (temp > New) { temp.left = insert(temp.left, New); if (temp.left.value() > temp.value()) { temp.right_rotation(ref temp); } } return(temp); }
private node <T> delete(node <T> Root, node <T> temp) { if (Root == null) { return(Root); } if (Root.equal(temp)) { if (Root.right == null) // have one child { Root = Root.left; } else if (Root.left == null) // have one child { Root = Root.right; } else // have two children { if (Root.right.value() > Root.left.value()) { Root.left_rotation(ref Root); Root.left = delete(Root.left, temp); } else { Root.right_rotation(ref Root); Root.right = delete(Root.right, temp); } } } else if (Root < temp) { Root.right = delete(Root.right, temp); } else { Root.left = delete(Root.left, temp); } return(Root); }