对于左子项 - 右兄弟树 - 具有以下插入方法 - 似乎在该方法的私有版本中再次调用StackOverflowError
的行中导致addpage
。任何人都可以帮助建议如何修复它?对不起,如果之前有人询问过。
public PageNode addPage(String PageName)
{
PageNode ParentNode=new PageNode();
ParentNode.page=currentPage.page;
if (this.homePage==null)
this.homePage=ParentNode.parent;
else
ParentNode=this.addPage(PageName,ParentNode.parent);
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;
else
ParentNode = addPage(PageName, ParentNode.firstchild);
else if(currentPage.nextsibling == null)
currentPage.nextsibling=ParentNode;
else
ParentNode = addPage(PageName, ParentNode.nextsibling);
return ParentNode;
}
答案 0 :(得分:0)
您正在尝试实施二叉搜索树。您应该保证插入/删除/查找操作在搜索树中花费O(logn)
时间。您的addPage
方法不会重新平衡树,因此在最坏的情况下,树的高度为O(n)
。如果您不熟悉符号,请参阅Big-O notation。了解红黑/ AVL树。
您正在使用递归来添加新节点。由于树的高度可以达到O(n)
,因此超出了堆栈大小的限制。
我不知道JVM中每个线程的堆栈大小的默认上限。
答案 1 :(得分:0)
重写方法迭代而不是递归。
Java没有实现尾递归删除。