public BinarySearchTreeNode insert( BinarySearchTreeNode root2, BinarySearchTreeNode parent, int value) { if (root2 == null) { BinarySearchTreeNode temp = new BinarySearchTreeNode(null, value, null); root2 = temp; root2.height = 0; } else if (value < root2.getData()) { root2.setLeft(insert(root2.getLeft(), root2, value)); if ((FindHeight(root2.getLeft()) - FindHeight(root2.getRight())) == 2) { if (value < root2.getLeft().getData()) { System.out.println("SingleRotateLeft"); root2 = singleRotationLeft(root2); } else { System.out.println("LeftRightRotation"); root2 = leftRightRotation(root2); } } } else if (value > root2.getData()) { root2.setRight(insert(root2.getRight(), root2, value)); if ((FindHeight(root2.getRight()) - FindHeight(root2.getLeft())) == 2) { if (value < root2.getRight().getData()) { System.out.println("RightLeftRotation"); root2 = rightLeftRotation(root2); } else { System.out.println("SingleRightRotation"); root2 = singleRotationRight(root2); } } } root2.height = max(FindHeight(root2.getLeft()), FindHeight(root2.getRight())); return root2; }
public BinarySearchTreeNode singleRotationRight(BinarySearchTreeNode root5) { BinarySearchTreeNode temp5 = root5.getRight(); root5.setRight(temp5.getLeft()); temp5.setLeft(root5); root5.height = max(FindHeight(root5.getLeft()), FindHeight(root5.getRight())) + 1; temp5.height = max(FindHeight(temp5.getLeft()), FindHeight(temp5.getRight())) + 1; return temp5; }
public BinarySearchTreeNode getMax(BinarySearchTreeNode root3) { if (root3 == null) { return null; } else { while (root3.getRight() != null) { root3 = root3.getRight(); } return root3; } }
public void printInorder(BinarySearchTreeNode temp3) { if (temp3 != null) { printInorder(temp3.getLeft()); System.out.print(temp3.getData() + ","); printInorder(temp3.getRight()); } }
public int FindHeight(BinarySearchTreeNode root3) { if (root3 == null) { return 0; } int leftHeight = FindHeight(root3.getLeft()); int rightHeight = FindHeight(root3.getRight()); if (leftHeight > rightHeight) { return leftHeight + 1; } else { return rightHeight + 1; } }
public BinarySearchTreeNode rightLeftRotation(BinarySearchTreeNode root5) { root5.setRight(singleRotationLeft(root5.getRight())); return singleRotationRight(root5); }
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; }