在我的课上,他们的任务是编写一种方法来查找二进制搜索树的深度。但是,要抓住的是在树中添加了INORDER的单词。所以树本质上是线性的。送入树上的单词也是完整的小说《两个城市的故事》。在测试我的方法时,我创建了几个较小的测试文件,因此不必等待10分钟即可创建树。他们运行良好。但是,当我运行整本书时,我得到以下信息:线程“ main”中的异常java.lang.StackOverflowError
在ch08.trees.BinarySearchTree.recDepth(BinarySearchTree.java:284)

'''  public int depth() {
    return recDepth(root,0);
}

private int recDepth( BSTNode<T> tree, int depth) {
    if(tree == null) {
        return 0;
}else{
    return 1 +(Math.max(recDepth(tree.getRight(),depth),recDepth( tree.getLeft(), depth)));
    //

}'''


任何帮助将不胜感激。谢谢

最佳答案

递归方法有时是好的,它们可能更易读易懂,但是当有太多方法调用时(使用递归阶乘方法,想想100!),可能会导致意外结果,例如StackOverflowError。

出现此错误的原因是,当您调用具有大量输入的递归方法时,将有许多方法调用等待完成,并且这些调用将被放置在缓冲区中。因此,只要方法调用的大小超过缓冲区的大小,就会遇到错误。

如果需要处理大量输入,则应选择同一方法的迭代版本,而不是递归版本,以免发生错误。

07-28 01:05