我需要幫助實現基於二叉樹的文本形式的簡單網站結構 - 每個新的「頁面」都有一個父節點和兩個子節點。從家庭開始,設計是將第一個「頁面」添加到左側節點,然後將以家爲父節點的後續頁面添加到該節點的右側節點,所有這些也都鏈接到家庭作爲父節點。子類別相同 - 即添加一個父母「商店」的頁面應向左搜索,直到它找到商店頁面,然後添加到左側,如果其第一個從該節點添加到相同父級的後續頁面的權利。插入/添加二叉樹的方法
下面是目前爲節點,網站和頁面類的代碼。我很確定我的問題在於addpage方法的非遞歸方法,因爲到目前爲止,代碼產生了一個帶有兩個子節點的商店主頁,但所有其他節點都是空的。此外雷爾消息應該被添加到商店,而不是青梅正確的節點,但我有點難倒就如何做到這一點....
public class Site
{
public class PageNode
{
private Page page;
private PageNode firstchild;
private PageNode parent;
private PageNode nextsibling;
public PageNode()
{
this.firstchild = null;
this.parent = null;
this.nextsibling = null;
}
public PageNode(String PageName)
{
this.firstchild = null;
this.parent = null;
this.nextsibling = null;
}
public String toString()
{
return ""+page;
}
}
private PageNode currentPage;
private PageNode homePage;
public Site()
{
this.homePage=new PageNode();
this.homePage.page=new Page("Home");
this.currentPage=this.homePage;
PageNode shops=addPage("Shops",this.homePage);
addPage("News",this.homePage);
PageNode products=addPage("Products",this.homePage);
addPage("Paisley",shops);
addPage("Hamilton",shops);
PageNode kitchen=addPage("Kitchen",products);
addPage("Bedroom",products);
addPage("Kettles",kitchen);
addPage("Cookers",kitchen);
addPage("Toasters",kitchen);
}
public PageNode addPage(String PageName)
{
this.currentPage=new PageNode();
this.currentPage.page=new Page(PageName);
PageNode ParentNode=new PageNode();
ParentNode.page=currentPage.page;
if (this.homePage==null)
this.homePage=ParentNode;
else
ParentNode=this.addPage(PageName,ParentNode);
return ParentNode;
}
private PageNode addPage(String PageName, PageNode ParentNode)
{
ParentNode = new PageNode();
ParentNode.page=new Page(PageName);
if (this.currentPage.page.compareTo(ParentNode.page)==0)
{
System.out.println("attempt to insert a duplicate");
}
else
if (ParentNode.page.compareTo(currentPage.page)<0)
if(currentPage.firstchild == null)
{
currentPage.firstchild=ParentNode;
ParentNode.firstchild = new PageNode();
ParentNode.firstchild.page = new Page(PageName);
}
else if(currentPage.nextsibling == null)
{
currentPage.nextsibling=ParentNode;
ParentNode.nextsibling = new PageNode();
ParentNode.nextsibling.page = new Page(PageName);
}
return ParentNode;
}
public void displayCurrentPage()
{
if (this.homePage!=null)
{
this.displayBranches(this.homePage);
}
else
System.out.println("tree is empty");
}
private void displayBranches(PageNode ParentNode)
{
if (ParentNode!=null)
{
System.out.println(ParentNode.page+" ");
System.out.print(" left: ");
if (ParentNode.firstchild!=null)
System.out.println(ParentNode.firstchild.page);
else
System.out.println("null");
System.out.print(" right: ");
if (ParentNode.nextsibling!=null)
System.out.println(ParentNode.nextsibling.page);
else
System.out.println("null");
displayBranches(ParentNode.firstchild);
displayBranches(ParentNode.nextsibling);
}
}
和頁面類
public class Page implements Comparable
{
private String page;
public Page (String PageName)
{
page = PageName;
}
public String getPage()
{
return page;
}
public int compareTo(Object otherObject)
{
int result=((Page)otherObject).page.compareTo(this.page);
return result;
}
public String toString()
{
return ""+page;
}
}
請注意 - public site()由教師實施,因此其餘部分需要符合其中的addpage調用。
什麼是* *問題,這在這裏會更清楚了嗎? – 2011-05-22 14:28:55
對於如何修改我的addpage方法來正確添加10個頁面,我很難過。我已經嘗試了很多permuations,但是這是我得到的最好的,沒有崩潰或從一個無限遞歸堆棧stackioverflow :(只是一個可能需要改變的指標將是一個幫助。謝謝。 – Matt 2011-05-22 14:32:50
我剛剛發現,基本上被要求實施這個作爲一個左兒童 - 右兄弟樹(不是教師認爲它有用說這個,但嘿)... – Matt 2011-05-22 16:58:07