public void removeNode (Tree forRemove) {
		Tree parent = forRemove.getParent();
		Tree leftChild = forRemove.getLeftChild();
		Tree rightChild = forRemove.getRightChild();
		
		// get highest child from removable tree
		Tree highestTree = getLeftHeight(forRemove) > getRightHeight(forRemove) ? leftChild : rightChild;
		
		if (highestTree == null) {
			// no children
			if (parent.getLeftChild() != null && parent.getLeftChild().getValue() == forRemove.getValue()) {
				parent.setLeftChild(null);
			} else {
				parent.setRightChild(null);
			}
			
			Tree tmpTree = parent;
			while (tmpTree != null) {
				recalcHeight(tmpTree);
				tmpTree = tmpTree.getParent();
			}
			
			Tree degTree = chekDeg(parent);
			if (degTree != null){
				typeOfRotation(degTree);
			}
			
			removed = -1000;
		} else {
			Tree forReplace = highestTree;
			if (highestTree.getValue() > forRemove.getValue()) {
				while (forReplace.getLeftChild() != null) {
					forReplace = forReplace.getLeftChild();
				}
			} else {
				while (forReplace.getRightChild() != null) {
					forReplace = forReplace.getRightChild();
				}
			}
			forRemove.setValue(forReplace.getValue());
			removeNode(forReplace);
		}
	}