【问题标题】:calculate the average depth of a binary search tree计算二叉搜索树的平均深度
【发布时间】:2018-04-08 23:40:17
【问题描述】:

所以我需要计算一个 BST 的平均深度,我在我的类 BST 中有这个函数

int totalDepth(Node node, int depth) 
{
    if(node == null) 
    {
        return 0;
    }

    return depth                              // myself
     + totalDepth(node.left, depth + 1)   // my left subtree
     + totalDepth(node.right, depth + 1); // my right subtree
}

但是当我尝试像这样在 main 中打印结果时:

System.out.println("Average Depth : "+tree.totalDepth(tree.root,0)/10000);

我得到一个堆栈溢出错误

请帮帮我

【问题讨论】:

  • 放入大量调试。从函数开头的一些开始,显示有关当前节点的一些内容。将返回表达式分开,这样您就可以在使用node.left 的调用之前放置一个调试打印,并在使用node.right 的调用之前再次放置一个调试打印。这应该说明它为什么呈螺旋式上升。发布显示您如何创建tree 的代码可能会很有用。
  • 树中有多少个节点?此外,树的构造是否健壮,即没有循环引用?

标签: java recursion tree binary-search-tree stack-overflow


【解决方案1】:

我相信您认为您正在遍历您的二叉树,但您一直在同一节点上不断调用 totalDepth,直到 JVM 内存不足。

我建议您添加打印语句或登录到您的totalDepth 方法,以查看您遍历二叉树的深度,或者您是否正在遍历它。我假设 if (node == null) 永远不会评估为 true,因此调用堆栈会继续运行,直到内存不足。

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 2023-03-30
    • 1970-01-01
    • 2015-08-25
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多