private TreeNode successor(TreeNode predecessorNode) {
		TreeNode successorNode = null;

		if (predecessorNode.left != null) {

			successorNode = predecessorNode.left;

			while (successorNode.right != null) {

				successorNode = successorNode.right;
			}

		} else {

			successorNode = predecessorNode.parent;

			while (successorNode != null && predecessorNode == successorNode.left) {

				predecessorNode = successorNode;
				successorNode = predecessorNode.parent;

			}

		}

		return successorNode;
	}