要么我一直盯着这段代码太长时间,要么就是我无法想出这个代码。但是当我按降序使用8000号文本文件时; 8000,7999,...我在高度函数中得到了分段错误。如果有人能看一眼,我会非常感激。感谢。
int BST::height(TreeNode* node)
{
int leftSubtree = 0;
int rightSubtree = 0;
if (node == NULL)
return 0;
else
{
if (node -> getLeft() != NULL)
leftSubtree = height(node -> getLeft());
if(node -> getRight() != NULL)
rightSubtree = height(node -> getRight());
if (leftSubtree > rightSubtree)
return leftSubtree + 1;
else
return rightSubtree + 1;
}
}//ends second height
答案 0 :(得分:1)
如果你有一个排序的数字列表,那么你可能会将它存储在一个列表中(树的最坏情况是O(n),除非它是平衡的)。
在这种情况下,递归例程将递归8000次,堆栈深度为8000.
我不知道这是否足以溢出堆栈,但无论如何你应该在中间阶段看看你的树,看看是否一切都在最左边的分支上。