これは宿題に関する質問ですので、完全なコード解答を探しているわけではありません。基本的な配列[] Javaでのツリーのデータ構造
私はクラスの犬
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;
}
}
そして、配列に格納されたその子を持つルートの犬のスポットを含むデータ・ファイルを与えられています。私は、データファイルを開くことができるコードを記述し、ツリー名のデータ構造を調べて、入力名がルート(子孫)の子孫であるかどうかを調べる必要があります。
私はデータファイルを開くことができると確信しています。私はリンクとして配列を持つノードを作成する構文に苦労しています。私たちの教科書は、左右にリンクするバイナリツリーのみをカバーしますが、可変数のリンクには該当しません。 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);
}
}
}
追加のDogTreeクラスを設計する理由を教えてください。あなたはすでにDogクラスのツリー構造を持っています。Dogには一連の子があり、各子はそれ自身が子の配列を持つDogですから、それぞれの子が配列されています。 –
これは役に立つかもしれません - あなたが望むビットを選んでください。recurseDepthを簡単に変更して検索することができるはずです。 http://www.java2s.com/Code/Java/Collections-Data-Structure/TreeNode.htm – xagyg
私たちのテキストは、エントリクラスからノード/リストを設定するために、常に別のクラスを作成します。それは、私がどこかで親しみを持ち始めようとしているので、私はそうしたと言いました。 – sage88