【发布时间】:2017-06-16 21:43:58
【问题描述】:
在 C++ 中实现 BST 时遇到问题。当我将大约 20,000 条数据的小数据插入 BST 时,它运行良好。如果我尝试插入 100,000 左右的大量数据。 BST 出现运行时错误。你们能帮帮我吗?
这是我的实现。 Binary Search.h
#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;
struct treeNode
{
long long data;
treeNode *left;
treeNode *right;
};
treeNode *insertNode(treeNode *node,long long data)
{
if(node==NULL)
{
treeNode *temp = new treeNode;
//temp = (treeNode *)malloc(sizeof(treeNode));
temp -> data = data;
temp -> left = temp -> right = NULL;
return temp;
}
if(data >(node->data))
{
node->right = insertNode(node->right,data);
}
else if(data < (node->data))
{
node->left = insertNode(node->left,data);
}
/* Else there is nothing to do as the data is already in the tree. */
return node;
}
treeNode * searchNode(treeNode *node, long long data)
{
if(node==NULL)
{
/* Element is not found */
return NULL;
}
if(data > node->data)
{
/* Search in the right sub tree. */
return searchNode(node->right,data);
}
else if(data < node->data)
{
/* Search in the left sub tree. */
return searchNode(node->left,data);
}
else
{
/* Element Found */
return node;
}
}
void displayInorder(treeNode *node)
{
if(node==NULL)
{
return;
}
displayInorder(node->left);
cout<<" " << node->data<<" ";
displayInorder(node->right);
}
void displayPreorder(treeNode *node)
{
if(node==NULL)
{
return;
}
cout<<" " <<node->data<<" ";
displayPreorder(node->left);
displayPreorder(node->right);
}
void displayPostorder(treeNode *node)
{
if(node==NULL)
{
return;
}
displayPostorder(node->left);
displayPostorder(node->right);
cout<<" " <<node->data<<" ";
}
我在以下位置收到运行时错误:
node->right = insertNode(node->right,data);
请帮帮我。
提前谢谢你!
【问题讨论】:
-
显示您的
main例程或插入流程 -
也许递归深度太大了?您的操作系统中每个进程的堆栈有多大?
-
旁注:您正在泄漏内存。
-
这可能只是因为有这么多的元素,你的堆空间用完了。搜索如何增加堆大小,执行此操作,然后回复我们。
-
将递归更改为 while 循环。由于您没有重新平衡树,因此 100,000 个有序元素总是会破坏您的堆栈。测试用例:依次插入1到1,000,000。
标签: c++ error-handling runtime binary-search-tree