Это вопрос домашней работы, поэтому я не ищу полный код ответа.Базовый массив [] Структура данных дерева в Java
я был дан класс Dog
package lab12;
import java.io.Serializable;
public class Dog implements Serializable{
public Dog[] children;
public String name;
public Dog(String name)
{
this.name = name;
}
@Override
public String toString()
{
return name;
}
}
И файл данных, который содержит корень собака пятно, которая имеет своих детей, хранящихся в массиве. Мне нужно написать код, который может открыть файл данных, а затем перейти через структуру данных дерева, чтобы узнать, является ли входное имя потомком корня (Spot).
Я довольно уверен, что могу открыть файл данных. Я борюсь с синтаксисом создания узлов, у которых есть массив в качестве ссылки. Наш учебник охватывает только бинарные деревья, которые либо связаны с левым или правым, но не с переменным числом ссылок. Я нашел пример универсального метода, который использует подход List.
public class Tree<T>
{
private Node<T> root;
public static class Node<T>
{
private T data;
private Node<T> parent;
private List<Node<T>> children;
}
public Tree(T rootData)
{
root = new Node<T>();
root.data = rootData;
root.children = new ArrayList<Node<T>>();
}
}
Поскольку я должен использовать файл данные я не могу изменить структуру узла на что-либо другое, чем хранение детей в собачке []. Я не могу найти пример класса node, используя базовый массив для хранения дочерних элементов, и я не могу понять синтаксис для этого. Я думаю, что это поможет моему пониманию увидеть это без дженериков, прежде чем я попытаюсь изучить его.
Вот мой код до сих пор:
package lab12;
public class DogTree
{
//Start Inner Class
private static class Node
{
private String name;
private Node parent;
private Node Dog[] children; //This is where I'm confused
}
//End Inner Class
private Node root;
public DogTree()
{
root = null;
}
public boolean isDescendant(String name)
{
return isInSubtree(name, root);
}
private static boolean isInSubtree(String name, Node subTreeRoot)
{
if(subTreeRoot == null)
{
return false;
}
else if(subTreeRoot.name.equals(name))
{
return true;
}
else
{
//This is where my confusion on the
//node design causes implementation problems
return isInSubtree(name, subTreeRoot.children);
}
}
}
Почему вы хотите создать дополнительный класс DogTree? У вас уже есть древовидная структура с классом Dog, так как у собаки есть массив детей, где каждый ребенок сам является собакой, имеющей массив детей, где каждый ребенок ... –
Это может помочь - это больше, чем вам нужно - но выберите нужные вам биты.Вы должны иметь возможность легко изменить recurseDepth, чтобы выполнить поиск. http://www.java2s.com/Code/Java/Collections-Data-Structure/TreeNode.htm – xagyg
Наш текст всегда создает отдельный класс для настройки узла/списка из класса ввода. Это сказало, что я только сделал это, потому что я пытаюсь начать с где-то знакомого. – sage88