これは宿題の質問なので、完全なコードの回答は求めていません。
私は犬のクラスを与えられました
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>>();
}
}
データファイルを使用する必要があるため、ノードの構造を、子を Dog[] に格納する以外に変更することはできません。基本的な配列を使用して子を格納するノード クラスの例が見つかりません。また、これを行うための構文もわかりません。ジェネリックを使用して学習する前に、ジェネリックを使用せずにそれを確認することは、私の理解に役立つと思います。
これまでの私のコードは次のとおりです。
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);
}
}
}