public void delete(Node treeNode, int value) {
		Node target = findNode(treeNode, value);
		
		if(target == null){
			// node is not in the tree
			return;
		}
		
		// target has middleChild, so we delete the last of the middle child
		if(target.middleChild != null){
			while (target.middleChild != null){
				target = target.middleChild;
			}
			target = null;
			return;
		}
		
		// target has no children
		if(target.rightChild == null && target.leftChild == null){
			target = null;
			return;
		}
		
		// at this point the terget nog could have left, right or both of those children
		
		// target has  left children
		if(target.leftChild != null){
			Node tmpNode = target.leftChild;
			this.insert(tmpNode, tmpNode.parent.leftChild);
			tmpNode.parent.leftChild = tmpNode;
		}
		
		// target has  right children
		if(target.rightChild != null){
			Node tmpNode = target.rightChild;
			this.insert(tmpNode.parent.rightChild, tmpNode);
			
		}
		
		target = null;
		return;
		
	}