@Override
    public T add(T obj) throws IllegalArgumentException {
        if (obj == null) {
            throw new IllegalArgumentException("The object to add must be not null");
        }
        T data = null;
        if (this.node == null) {
            this.node = new Node<T>();
            data = obj;
            this.node.data = data;
        } else {
            Node currentNode = node;
            Node parent = node;
            while (currentNode != null) {
                if (currentNode.data.compareTo(obj) == 0) {
                    return obj;
                }
                if (currentNode.data.compareTo(obj) > 0) {
                    parent = currentNode;
                    currentNode = currentNode.leftChild;
                } else {
                    parent = currentNode;
                    currentNode = currentNode.rightChild;
                }
            }
            Node<T> newNode = new Node<T>();
            data = obj;
            newNode.data = data;
            newNode.parent = parent;
            if (parent.data.compareTo(obj) > 0) {
                parent.leftChild = newNode;
            } else {
                parent.rightChild = newNode;
            }
        }
        size++;
        return data;
    }