Dies ist eine Hausaufgabenfrage, daher suche ich nicht nach einer vollständigen Codeantwort.Basic Array [] Baum Datenstruktur in Java
Ich habe eine Klasse Hund
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;
}
}
und eine Daten-Datei gegeben worden, die eine Wurzel Hund-Punkt enthält, die ihre Kinder in einem Array gespeichert hat. Ich muss Code schreiben, der die Datendatei öffnen kann, und dann durch die Baumdatenstruktur gehen, um zu sehen, ob ein Eingabe-Name ein Nachkomme des Stammes (Spot) ist.
Ich bin ziemlich zuversichtlich, ich kann die Datendatei öffnen. Ich kämpfe mit der Syntax der Erstellung von Knoten, die ein Array als Link haben. Unser Lehrbuch behandelt nur binäre Bäume, die entweder nach links oder rechts verlinken, aber nicht zu einer variablen Anzahl von Links. Ich habe ein Beispiel für eine generische Version gefunden, die einen List-Ansatz verwendet.
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>>();
}
}
Da ich die Daten-Datei verwenden, kann ich nicht die Struktur des Knoten auf etwas anderes als ändern, um die Kinder in einem Hund zu speichern []. Ich kann kein Beispiel für eine Knotenklasse finden, die ein Basisarray zum Speichern der untergeordneten Elemente verwendet, und ich kann die Syntax dafür nicht herausfinden. Ich denke, es würde meinem Verständnis helfen, es ohne Generika zu sehen, bevor ich versuche, es zu lernen.
Hier ist mein Code so weit:
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);
}
}
}
Warum möchten Sie eine zusätzliche DogTree-Klasse entwerfen? Sie haben bereits eine Baumstruktur mit der Hundeklasse, da ein Hund eine Reihe von Kindern hat, wobei jedes Kind selbst ein Hund ist, der eine Reihe von Kindern hat, wobei jedes Kind ... –
Dies könnte helfen - es ist mehr als Sie brauchen - aber wählen Sie die Bits, die Sie wollen.Sie sollten RecurseDepth einfach ändern können, um Ihre Suche durchzuführen. http://www.java2s.com/Code/Java/Collections-Data-Structure/TreeNode.htm – xagyg
Unser Text erstellt immer eine separate Klasse für Knoten/Listen-Setup aus der Eintragsklasse. Das sagte ich nur, weil ich versuche, von irgendwo vertraut zu beginnen. – sage88