private void removeFoundNode(TreeNode removingNode) {
		TreeNode parentNode;

		if (removingNode.left == null || removingNode.right == null) {
			parentNode = removingNode;
		} else {
			parentNode = successor(removingNode);
			removingNode.key = parentNode.key;
		}

		TreeNode childNode;
		if (parentNode.left != null) {
			childNode = parentNode.left;
		} else {
			childNode = parentNode.right;
		}

		if (childNode != null) {
			childNode.parent = parentNode.parent;
		}

		if (parentNode.parent == null) {
			this.root = childNode;
		} else {
			if (parentNode == parentNode.parent.left) {
				parentNode.parent.left = childNode;
			} else {
				parentNode.parent.right = childNode;
			}
			recursiveBalance(parentNode.parent);
		}
		parentNode = null;
	}