package ru.job4j.SimpleTree;

import java.util.*;

/**
 * Created by Comp on 03.10.2017.
 */
public class Tree<E extends Comparable<E>> implements SimpleTree<E> {
    private Node<E> node;
    private Node<E> children;

    private int i;
    private int size;
    private boolean element;


    public Tree(E e) {
        node.value = e;
    }


    private int size() {
        return size;
    }

    /*
     * метод add - Должен находить элемент parent в дереве по условию compare(node, parent) == 0 и добавлять
     * в него дочерний элемент. node.children.add(child); В дереве не могут быть дубликатов.
     * Итератор должен собрать все элементы в List и возвращать данные из скопированной коллекции.
     */
    @Override
    public boolean add(E parent, E child) {
        boolean isPresent = false;
        if (parent == null && child == null) {
            return false;
        }

        if (findBy(parent).isPresent()) {
            if (!findBy(child).isPresent()) {
                Node<E> node = new Node<E>(child);
                node.childen.add(children);
                findBy(parent).get();

            }
            isPresent = true;
            size++;

        } else {
            isPresent = false;
        }
        return isPresent;
    }

    @Override
    public Optional<Node<E>> findBy(E value) {
        Optional<Node<E>> rsl = Optional.empty();
        Queue<Node<E>> data = new LinkedList<>();
        data.offer(this.node);
        while (!data.isEmpty()) {
            Node<E> el = data.poll();
            if (el.eqValue(value)) {
                rsl = Optional.of(el);
                break;
            }
            for (Node<E> child : el.getChilden()) {
                data.offer(child);
            }
        }
        return rsl;
    }

    @Override
    public Iterator<E> iterator() {
        return new ArrIterator();
    }

    class ArrIterator implements Iterator<E> {

        @Override
        public boolean hasNext() {
            E elem = node.value;

            boolean isPresent = false;
            if (elem != null) {
                isPresent = true;
            }
            return isPresent;
        }

        @Override
        public E next() {
            List<E> element = null;

            if (hasNext()) {
                element = (List<E>) element.iterator().next();

            } else throw new NullPointerException();
            return (E) element;
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Tree<?> tree = (Tree<?>) o;

        return i == tree.i && (node != null ? node.equals(tree.node) : tree.node == null);
    }

    @Override
    public int hashCode() {
        int result = node != null ? node.hashCode() : 0;
        result = 31 * result + i;
        return result;
    }
}
@@ -198,97 +198,17 @@
 ate 
-Node%3CE%3E children;%0A%0A    private int i;%0A    private int size;%0A    private boolean element;%0A
+int size;
 %0A%0A  
@@ -259,17 +259,16 @@
 %0A    %7D%0A%0A
-%0A
     priv
@@ -948,51 +948,8 @@
 d);%0A
-                node.childen.add(children);
 %0A   
@@ -2522,31 +2522,60 @@
     
-return i == tree.i && (
+if (size != tree.size) return false;%0A        return 
 node
@@ -2627,17 +2627,16 @@
  == null
-)
 ;%0A    %7D%0A
@@ -2766,17 +2766,20 @@
 esult + 
-i
+size
 ;%0A      

Update Создать элементарную структуру дерева[#26347]