Не проходит по двум последним пунктам. На что м.б. аллергия валидатора?
public static void main(String[] args) {
List<String> list = new CustomTree();
for (int i = 1; i < 18; i++) {
list.add(String.valueOf(i));
}
System.out.println(list.size());
System.out.println();
System.out.println(CustomTree.getParent("16"));
}Вывод:
17
7
package com.javarush.task.task20.task2028;
import java.io.Serializable;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/*
Построй дерево(1)
*/
public class CustomTree extends AbstractList <String> implements Cloneable, Serializable {
static List<Entry<String>> entryList = new ArrayList<>();
Entry<String> root;
public CustomTree() {
this.root = new Entry<>("0");
entryList.add(root);
}
@Override
public String get(int index) { throw new UnsupportedOperationException(); }
@Override
public int size() { return entryList.size() - 1; }
@Override
public boolean add(String s) {
for (Entry<String> x : entryList) {
if (x.isAvailableToAddChildren()) {
if (x.availableToAddLeftChildren) {
x.leftChild = new Entry<>(s);
x.leftChild.parent = x;
entryList.add(x.leftChild);
x.availableToAddLeftChildren = false;
return true; }
if (x.availableToAddRightChildren) {
x.rightChild = new Entry<>(s);
x.rightChild.parent = x;
entryList.add(x.rightChild);
x.availableToAddRightChildren = false;
return true; } } }
return false; }
@Override
public void add(int index, String element) { throw new UnsupportedOperationException(); }
@Override
public String set(int index, String element) { throw new UnsupportedOperationException(); }
@Override
public String remove(int index) { throw new UnsupportedOperationException(); }
@Override
public boolean addAll(int index, Collection<? extends String> c) { throw new UnsupportedOperationException(); }
@Override
public List<String> subList(int fromIndex, int toIndex) { throw new UnsupportedOperationException(); }
@Override
protected void removeRange(int fromIndex, int toIndex) { throw new UnsupportedOperationException(); }
public static String getParent(String s) {
for (Entry<String> x : entryList) {
if (x.parent != null && x.elementName.equals(s)) return x.parent.elementName; }
return "It is the root directory without parent"; }
static class Entry<String> implements Serializable {
String elementName;
boolean availableToAddLeftChildren;
boolean availableToAddRightChildren;
Entry<java.lang.String> parent;
Entry<java.lang.String> leftChild;
Entry<java.lang.String> rightChild;
public Entry(String s) {
elementName = s;
availableToAddLeftChildren = true;
availableToAddRightChildren = true;
}
public boolean isAvailableToAddChildren () {
return availableToAddLeftChildren | availableToAddRightChildren; } } }
