StackOverflowError与二叉树

时间:2011-05-22 21:15:16

标签: java binary-tree stack-overflow

对于左子项 - 右兄弟树 - 具有以下插入方法 - 似乎在该方法的私有版本中再次调用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;
}

2 个答案:

答案 0 :(得分:0)

您正在尝试实施二叉搜索树。您应该保证插入/删除/查找操作在搜索树中花费O(logn)时间。您的addPage方法不会重新平衡树,因此在最坏的情况下,树的高度为O(n)。如果您不熟悉符号,请参阅Big-O notation。了解红黑/ AVL树。

您正在使用递归来添加新节点。由于树的高度可以达到O(n),因此超出了堆栈大小的限制。

我不知道JVM中每个线程的堆栈大小的默认上限。

答案 1 :(得分:0)

重写方法迭代而不是递归。

Java没有实现尾递归删除。