public class BinarySearchTree{
public BinarySearchTree()
public void insert(int key)
root = insertRec(root, key);
Node insertRec(Node root, int key)
root.left = insertRec(root.left, key);
root.right = insertRec(root.right, key);
void inorderRec(Node root)
Console.WriteLine(root.key);
void postorderRec(Node root)
postorderRec(root.right);
Console.WriteLine(root.key);
void preorderRec(Node root)
Console.WriteLine(root.key);
public void deleteKey(int key) { root = deleteRec(root, key); }
Node deleteRec(Node root, int key)
root.left = deleteRec(root.left, key);
root.right = deleteRec(root.right, key);
else if (root.right == null)
root.key = minValue(root.right);
root.right = deleteRec(root.right, root.key);
while (root.left != null) {
public static void Main(String[] args)
BinarySearchTree tree = new BinarySearchTree();