public BinarySearchTreeNode remove(BinarySearchTreeNode root2, int element) { // System.out.println("################"); if (root2 == null) { return null; } else if (element < root2.getData()) { root2.setLeft(remove(root2.getLeft(), element)); } else if (element > root2.getData()) { root2.setRight(remove(root2.getRight(), element)); } else { // System.out.println("same value"); BinarySearchTreeNode temp; if (root2.getLeft() == null && root2.getRight() == null) { root2 = null; } else if (root2.getLeft() != null && root2.getRight() != null) { temp = getMax(root2.getLeft()); root2.setData(temp.getData()); root2.setLeft(remove(root2.getLeft(), root2.getData())); } else { temp = root2; if (root2.getLeft() == null) { root2 = root2.getRight(); } if (root2.getRight() == null) { temp = getMax(root2.getLeft()); if (temp != null) { root2.setData(temp.getData()); root2.setLeft(remove(root2.getLeft(), root2.getData())); } } } } // System.out.println("---------------------"); if ((FindHeight(root2.getLeft()) - FindHeight(root2.getRight())) == 2) { if (element < root2.getLeft().getData()) { System.out.println("SingleRotateLeft"); root2 = singleRotationLeft(root2); } else { System.out.println("LeftRightRotation"); root2 = leftRightRotation(root2); } } if ((FindHeight(root2.getRight()) - FindHeight(root2.getLeft())) == 2) { // System.out.println("++++++++++++++++++++++"); BinarySearchTreeNode parent = null; BinarySearchTreeNode temp2 = root2; while (temp2.getRight() != null) { parent = root2; temp2 = temp2.getRight(); } if (temp2.getLeft() == null && temp2.getRight() == null && temp2.getLeft() == null) { singleRotationRight(root2); } else { rightLeftRotation(root2); } } root2.height = max(FindHeight(root2.getLeft()), FindHeight(root2.getRight())); return root2; }