這是一個家庭作業問題,所以我沒有找到完整的代碼答案。基本數組[] 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;
}
}
幷包含有其存儲在陣列兒童根狗現貨數據文件。我需要編寫可打開數據文件的代碼,然後遍歷樹數據結構以查看輸入名稱是否爲根(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>>();
}
}
因爲我必須使用數據文件,我不能節點的結構改變不是存儲在兒童狗[]以外。我找不到一個使用基本數組來存儲子元素的節點類的例子,我無法弄清楚這樣做的語法。我認爲這會幫助我的理解,在我嘗試學習它之前,先看看它沒有泛型。
這裏是我到目前爲止的代碼:
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有一系列的孩子,每個孩子本身就是一個擁有一系列孩子的狗,每個孩子... –
這可能有幫助 - 它比你需要的更多 - 但選擇你想要的位。您應該可以輕鬆修改recurseDepth來執行搜索。 http://www.java2s.com/Code/Java/Collections-Data-Structure/TreeNode.htm – xagyg
我們的文本總是爲入口級別的節點/列表設置一個單獨的類。這就是說我只是這麼做的,因爲我試圖從熟悉的地方開始。 – sage88