- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经为这个程序工作了好几天,并且大部分时间都可以正常工作。但是在调用递归高度函数时出现随机读取访问错误。我已经被困了几个小时试图修复这个错误,我已经通过这个函数太多次了,无法计数,而且似乎无法找到错误的模式。我试图通过检查是否为 null 来解决此问题,但由于我正在检查的节点甚至不等于 null,因此这也失败了。这个错误最令人困惑的部分是它是完全随机的。这可能是一个我看不到的简单修复。任何帮助都会很棒。
这是代码
int Tree::height(Node* p)
{
int left, right;
//if node is null return 0
if (p == nullptr || p == NULL)
{
return 0;
}
这是我尝试查看节点是否具有无效值的地方。然而,这仅在某些时候有效,因为有时节点根本没有值(value)。
//if node has invalid values, return 0
if (p->getTheData() == NULL || p->getTheData() >= 1000000000 || p- >getTheData() <= -1000000000)
{
return 0;
}
这是在递归检查树时传入不存在的节点的地方。我不知道这是怎么发生的,也不知道为什么会发生这种情况
//recursively add to the height to check the balance
left = height(p->getLLink());
right = height(p->getRLink());
if (left > right)
return left + 1;
else
return right + 1;
}
这个函数最初是用来平衡树的。我传入节点,如果需要,它会平衡树。
void Tree::balFactor(Node* p, int inNodeData)
{
//declare needed objects and variables
int unBalancedRight = -2;
int two = 2;
Node* rightLink;
Node* leftLink;
//check to see if node is null and set a catch case
if (p == NULL || p->getRLink() == NULL)
{
rightLink = new Node;
rightLink->setBalFac(1001);
}
//if node is valid, move right
else
{
rightLink = p->getRLink();
}
if (p == NULL || p->getLLink() == NULL)
{
leftLink = new Node;
leftLink->setBalFac(1001);
}
//if node is valid move
else
{
leftLink = p->getLLink();
}
//check to see if the node is valid
if (p != nullptr)
{
//check to see if the passed in node number is greater than the passed in data
if (inNodeData > p->getTheData())
{
//check to see if the tree needs to be balanced
if ((height(rightLink) - height(leftLink) == two))
{
//check to see what type of balancing needs to happen
if (inNodeData > p->getRLink()->getTheData())
rotateRightOnce(p);
else
rotateRightTwice(p);
}
}
//check to see in incoming data is less than p node
else if (inNodeData < p->getTheData())
{
//check to see if the data needs to be balanced
if ((height(p->getLLink() - height(p->getRLink())) == two))
{
//check to see what type of rotation needs to happen
if (inNodeData < p->getLLink()->getTheData())
rotateLeftOnce(p);
else
rotateLeftTwice(p);
}
}
//check the balance factor recursively until all nodes have been checked
balFactor(p->getLLink(), inNodeData);
balFactor(p->getRLink(), inNodeData);
}
}
如果您需要任何其他详细信息,请告诉我
最佳答案
最好的办法是在调试器中单步执行它。然后您可以在每个点检查树,看看哪里出了问题。
以下是一些需要注意的事项:
您使用 new Node
创建了 leftLink
和 rightLink
,但从未释放它们。请注意,您并不总是希望释放它们,因为它们有时会指向有效节点。您可能需要重新考虑其工作原理。
更重要的是,这一行:
if ((height(rightLink - height(leftLink)) == two))
在从指针中减去另一个高度后调用高度,因为你的括号混淆了。我想你的意思是
if ((height(rightLink) - height(leftLink)) == two)
这可能会导致严重的问题。
(为清楚起见进行了编辑)
关于c++ - 随机递归AVL树高误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33428989/
我有一个任务,必须求解线性方程组 Ax =B,其中 A 是 10000 量级的稀疏矩阵。我正在使用 csparse 来求解它。在我的初始实现中,出于演示目的,A 是 3*3 阶单位矩阵,B ={1,2
我正在尝试训练随机森林模型,但出现以下错误。我需要对分类模型使用不同的设置来解决 RMSE 问题吗?我尝试将“好”转换为一个因素,但这引发了一个新错误。 错误: Error in train.defa
当使用 %Lf 打印时,一个大的 double 值被改变以下组合的值给出正确的结果小数点前9位/小数点后6位例如用 %Lf 打印的小数点前 9 位的值输入:3435537287.32输出:343553
我正在尝试实现高度为 100% 的重复垂直背景。遗憾的是,每当我试图通过仅添加纯文本来扩展页面的高度时,具有 100% 高度和背景重复的背景就会被切掉。我只想让背景重复。这是屏幕截图。 http://
所以我有: t = [0.0, 3.0, 5.0, 7.2, 10.0, 13.0, 15.0, 20.0, 25.0, 30.0, 35.0] U = [12.5, 10.0, 7.6, 6.0,
我使用了 Nister 的 5 点法来计算基本矩阵。使用 RANSAC 和 Sampson 错误阈值进一步改进了异常值拒绝。我随机选择 5 个点集,估计基本矩阵并评估匹配向量的 Sampson 误差。
为分类问题运行 gbm 函数时。我收到以下错误: Error in res[flag, ] 0.5,1,0) table(pred,df$Group) pred 0 1 0 98
我使用 Angular ngTagsInput,我的列表如下: [{text: "4353453"}, {text: "453453"}, {text: "4534534"}, {text: "53
我正在尝试 Angular 问题,并且坚持理解错误,这意味着如果我无法理解错误,我将无法前进,例如 zone.js:654 Unhandled Promise rejection: Failed to
我有一个关于在线性混合模型上运行事后测试的问题: 我正在 lme4 中运行一个线性混合模型,分为 3 组,每组 5 条蛇,每组采用不同的通气率 (Vent),在不同的位置进行测量时间点 (Time),
我正在尝试运行逻辑回归并不断收到“NA”错误。问题是它说有 NA 的列没有 NA,全是 0 或 1。我的代码如下: #V1=race, V2=momcounts of breast cancer, V
我在输出之间得到随机 NaN。 Random Temp:61.816288952756864 'F Random Temp:NaN 'F Random Temp:NaN 'F Random Temp:
我正在尝试通过取下平板框架来减少我的大炮天文图像,这很有效。但它使所有值都非常低(所以几乎是黑色图片),这就是为什么我也想将其乘以平均值。然而这给了我一个错误。 (虽然没有乘法它也能工作。) 有人知道
我正在使用 adaboost 构建一个模型,并尝试让 roc 图发挥作用。这是我的代码: ens=fitensemble(X,y,'AdaBoostM1',100,'Tree'); [ytest, s
当尝试使用 Protractor 和 Angular Testing 模态窗口上的可见按钮时,我收到以下错误: UnknownError: unknown error: Element is not
我正在尝试使用命令通过 Yeoman 构建 Angular “哟有 Angular ” 一切正常,直到我到达 tmp 目录: npm ERR! Error: EACCES, mkdir '/home/
我在使用 OpenCV 计算立体声对的校正时遇到一些问题:stereoCalibrate 返回高均方根误差,我得到了错误的校正对。我尝试了我的整改程序和 opencv 提供的 stereo_calib
我在 Mac (OS X 10.9) 上安装了 Yeoman,并且正在尝试运行 yo angular。 我收到以下错误: path.js:384 throw new TypeError('Ar
我有运行循环的线程。我需要该循环每 5 毫秒运行一次(1 毫秒错误)。我知道 Sleep() 函数并不精确。 你有什么建议吗? 更新。我不能用其他方式做到这一点。在循环结束时,我需要某种 sleep
我一直在试验 FFT 算法。我使用 NAudio 以及来自互联网的 FFT 算法的工作代码。根据我对性能的观察,生成的音调不准确。 我将 MIDI(从 GuitarPro 生成)转换为 WAV 文件(
我是一名优秀的程序员,十分优秀!